本文为您介绍小程序版本上传 SDK,支持微信小程序、抖音小程序和 uni-app 开发框架。
本文档仅适用于 TTSDK 2.0.0 及以上的版本,其他版本请参考小程序上传 SDK(旧版)。
说明
您可通过上传 SDK 发版历史查看各版本更新点。
上传前需要从服务端获取上传 STS 临时访问凭证,签名算法由服务端接入,接入方法请参考以下服务端各生成上传凭证文档:
说明
由于签名计算放在前端会暴露 AccessKey 和 SecretKey,为了保障您的信息安全,避免上传资源受到污染。我们将签名计算过程放在后端实现(利用签名 SDK 生成一对临时的 AKSK),前端会向业务服务端获取签名结果,正式部署时请在后端加一层您自身网站本身的权限检验。
把网关地址和上传地址添加到小程序的访问白名单中。
字段名 | 内容 |
---|---|
request 合法域名 |
|
uploadFile 合法域名 |
|
使用 npm 方式引入 SDK,具体代码示例如下所示:
npm install tt-uploader-miniprogram
您可参考以下代码示例,配置回调监听并快速将文件上传至指定服务 ID 对应的 veImageX 服务中。
import TTUploader from 'tt-uploader-miniprogram'; // 初始化uploader const uploader = new TTUploader({ userId: 'volcengine-user1', // 必填,用户 ID。自定义,建议设置能识别用户的唯一标识 id,用于上传出错时排查问题,不要传入非 ASCII编码 appId: 78**27, // 必填,应用 ID。在应用服务中创建的 AppID,质量监控等以该参数来区分业务方,务必正确填写 imageConfig: { serviceId: 'hj****7f' // 必填,服务 ID。请在 veImageX 控制台-服务管理查看并记录该值 } }); // 设置监听事件 uploader.on('error', (info) => { console.log('上传失败', info) }) uploader.on('progress', (infor) => { console.log('上传进度:', infor.percent) }); uploader.on('complete', (info) => { console.log('上传成功', info) }) // 添加上传文件 const key = uploader.addImageFile({ path: '', // 文件临时路径,从 chooseMedia 回调中获取 size: 1234, // 文件大小,从 chooseMedia 回调中获取 // 从服务端获取到的临时访问凭证,请参考【接入准备-获取上传签名】说明 stsToken: { "CurrentTime":"2023-03-31T07:47:14.866Z", "ExpiredTime":"2023-05-30T07:47:14.866Z", "SessionToken":"STS2****In0=", "AccessKeyId":"AKTPZDM1***iNTU5ODg", "SecretAccessKey":"aNXEA8uvC***Pqg==" }, fileExtension: '.png' }); // 开始上传 uploader.start(key)
初始化uploader
实例时可配置的属性如下所示:
const uploader = new TTUploader({ userId: 'Test1', //必填,自定义用户 ID,用于定位某用户的日志。 appId: 67**23, //必填,应用 ID,用于定位某业务应用的日志。 imageConfig: { //必填,图片上传配置。 serviceId: 'hi****2t' //必填,服务 ID,用于指定文件上传所在服务。 } });
您可参考下表完成以下配置,各配置具体说明如下表所示:
字段名 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
userId | String | 是 | null | 用户 ID。用于进行单点追踪日志,定位某一个用户的日志,请设置一个唯一 ID。 |
appId | Number | 是 | null | 应用 ID。用于定位某一条业务线的日志。
|
imageConfig | Object | 是 | null | 图片上传专用配置,默认值为 null。详情请参考 imageConfig。 |
useFileExtension | Boolean | 否 | false | 是否获取文件后缀名,取值如下所示:
|
uploadTimeout | Number | 否 | 30min | 上传文件请求的超时时间,单位为 ms。示例为 1000 * 60 * 30 。 |
gatewayTimeout | Number | 否 | 5min | 网关请求的超时时间,单位为 ms。示例为 1000 * 60 * 5 。 |
字段名 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
serviceId | String | 是 | null | 服务 ID。
|
添加上传图片文件,返回当前文件的 key 值(上传和取消上传等使用该值)。传入的 imageFileOption 配置如下表所示:
字段名 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
path | String | 是 | null | 上传文件的临时路径 |
size | Number | 是 | null | 上传文件的大小 |
stsToken | Object | 是 | null | 上传签名,token 是一个对象,包含 AccessKeyId、SecretAccessKey、SessionToken、CurrentTime、ExpiredTime 属性。 |
serviceId | String | 否 | null | 指定的上传文件服务存储。不指定时则使用初始化配置 imageConfig 中指定的 serviceId 。 |
storeKey | String | 否 | null | 指定的上传文件存储 key。仅支持[A-Za-z0-9-_./],不支持以/ 开头或结尾,不支持/ 连续出现, 与 file 参数一一对应。默认使用随机生成的字符串作为存储 key。 |
prefix | String | 否 | null | 仅当未指定 |
fileExtension | String | 否 | null | 仅当未指定 |
skipMeta | Boolean | 否 | false | 是否获取图片 meta 信息,取值如下所示:
说明 获取 meta 并返回对应的 meta 信息,如果 meta 获取超时或失败,则对应的 meta 信息为空。 |
skipCommit | Boolean | 否 | false | 是否跳过上传成功后的上报阶段(提高上传成功率,减少上传耗时)。
|
overwrite | Boolean | 否 | false | 是否开启重名覆盖上传,文件存储 key 相同时则为重名。开启后,新上传文件在上传路径及文件名重复时覆盖同名旧文件。若不开启,则新文件上传失败。取值如下所示:
注意 开启前,请确保您的上传 STS 签名已添加重名覆盖上传的标识。 |
该方法返回当前文件的 key 值时,用于开始上传和取消上传,代码示例如下所示:
const key = ttUploader.addImageFile({ path: '', // 上传文件临时路径 size: , // 上传文件大小 stsToken: { AccessKeyId: "", SecretAccessKey: "", SessionToken: "", ExpiredTime: "", CurrentTime:"", }, fileExtension: '.png' //指定上传文件扩展名 }); console.log(key); // 返回的文件 key 值,例如:file_1495442273603_999031
启动上传任务。如果该上传任务被暂停,则再次调用此方法时将恢复上传。请传入上传文件的 key 值,如不传,则所有已添加的文件将开始上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
uploader.start();
暂停上传,将暂存当前文件的上传信息。传入文件的 key 值,如不传,则将暂停所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
uploader.pause('file_1495442273603_999031');
恢复上传,将恢复当前被暂停的上传任务。传入文件的 key 值,如不传,则将恢复所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
uploader.restart();
取消某一文件的上传,同时删除暂存的上传信息。传入文件的 key 值,如不传,则将取消所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
uploader.cancel();
在文件上传的过程中,SDK 会依次抛出各类事件以通知外部,可根据业务需要监听这些事件,事件名称和事件描述如下表所示:
事件名称 | 描述 | 说明 |
---|---|---|
progress | 文件上传进行中 | 文件上传过程中会多次触发,可用于标识文件上传进度。会实时更新 percent,即总体进度。 |
complete | 文件上传完成 | 文件上传成功时触发,标识一个上传任务结束。部分已开获取分片权限的用户,在上传完成后可得到 ImageUri 等上传结果。 |
error | 文件上传失败 | 文件上传失败、发生错误时触发。 |
// 监听事件 uploader.on('progress', function(info) { console.log('上传进度:', info.percent); }); uploader.on('complete', function(info) { console.log('上传成功:', info); }); uploader.on('error', function(info) { console.error('上传失败:', info); });
progress
事件回调参数如下表所示。
属性 | 类型 | 描述 |
---|---|---|
percent | Number | 整体上传进度(百分比),取值范围为[0, 99]之间的整数,当complete 事件触发后才认为进度为 100。 |
totalSize | Number | 上传文件的总体大小,单位为 byte |
sentSize | Number | 此时已发送的字节数,单位为 byte |
key | String | 标识本次上传任务的字符串,由 addFile 方法返回 |
oid | String | 文件存储的 URI |
sliceIndex | Number | 可选,分片上传的场景下,标识此索引的分片上传完成 |
uploadId | String | 可选,分片上传的场景下,标识此次上传的唯一 ID |
complete
事件回调参数如下表所示。
字段名称 | 类型 | 描述 |
---|---|---|
filePath | String | 文件在本地的临时路径 |
fileSize | Number | 文件大小,单位为 byte |
startTime | Number | 文件开始上传的时间戳 |
totalDuration | Number | 上传总体耗时,单位为 ms |
key | String | 当前上传任务的 key(addFile 时自动生成) |
oid | String | 文件存储的 URI |
percent | Number | 当前上传总体进度百分比(%) |
speed | Number | 文件上传的平均速度,单位为 kb/s |
status | Number | 文件上传运行状态,取值如下所示:
|
type |
| 当前任务状态,取值如下所示:
|
uploadId | String | 可选,本次上传所使用的 uploadId |
extra | object | 当前状态的描述(随着生命周期不断变化) |
extra.message | String | 描述性信息 |
uploadResult | Object | 上传完成后的图片信息,包括 uri 等,见下方详细说明。 |
字段名称 | 类型 | 描述 |
---|---|---|
ImageUri | String | 图片的 URI,格式为 bucket/oid |
ImageWidth | Number | 图片宽度 |
ImageHeight | Number | 图片高度 |
ImageMd5 | String | 图片数据的 md5 值 |
FileName | String | 文件名,与 ImageUri中的 oid 部分一致 |
Uri | String | 与 ImageUri 一致 |
error
事件回调参数如下表所示。
属性 | 类型 | 描述 |
---|---|---|
key | String | 标识本次上传任务的字符串,由 addImageFile 方法返回。 |
code | Number | 错误码,包含小程序原生的错误码 |
error | String | 具体错误,包含小程序原生的错误信息 |
message | String | 错误描述信息 |
type | String | 事件类型,固定为 error |
stage | Number | 上传任务发生错误的阶段 |
statusCode | Number | 可选,网络请求的状态码 |
oid | String | 可选,文件的 URI |
uploadId | String | 可选,唯一的上传 ID |
错误码 | 描述 |
---|---|
100006 | 请求过期或请求的签名时间来自未来,如果仅部分用户出现该问题,可能为用户系统时间不准导致。 |
100026 | 错误的 STS2,可能是多种错误,例如签名错误、过期等。 |
100013 | 权限问题,ak sk 没有绑定策略或者 action 不对。 |
100009 | 请求的 AK 不合法。 |
1000001 | addFile 的 file 属性不是 Blob/File 的实例。 |
1000002 | StsToken 格式错误,此类错误发生的原因为:传入的Object字段缺失。 |
1001000 | 申请上传域名阶段错误。 |
1002000 | 初始化上传时发生错误。 |
1003000 | 文件上传阶段发生错误。 |
1003003 | 上传文件读取失败,一般出现在上传中的文件被删除的情况下。 |
1004000 | 文件分片合并阶段错误。 |
1005000 | 完成上传,获取媒体信息错误。 |