最近更新时间:2023.09.25 14:00:43
首次发布时间:2021.02.23 10:42:28
JS 版上传 SDK 支持图片的上传,默认支持文件的批量上传、分片上传、并发上传和上传网关域名配置。以下将为您介绍 SDK 的集成、配置等具体操作内容。
支持以下两种引入 SDK 方式,您可根据实际需要任选其一。
npm install tt-uploader
import TTUploader from 'tt-uploader'; const ttUploader = new TTUploader({ appId: xxx, // 必填,应用 ID。在应用服务中创建的 AppID,质量监控等以该参数来区分业务方,务必正确填写 userId: 'xxx', // 必填,用户 ID。建议设置能识别用户的唯一标识 id,用于上传出错时排查问题,不要传入非 ASCII编码 // 必填,图片上传相关配置 imageConfig: { serviceId: 'xx',// 必填,服务 ID。请在 veImageX 控制台-服务管理查看并记录该值。 } });
说明
调用 addImageFile 方法,实现添加上传文件的代码示例如下所示:
说明
addImageFile 将返回所添加上传文件 key 值,用于文件的上传和取消上传等方法。
const fileKey = ttUploader.addImageFile({ // 必填,待上传的Blob/File文件 file: fileList[0], // 必填,从服务端拿到的token,token为一个对象类型,详见下方 stsToken 签名生成 sdk 说明 stsToken: { AccessKeyId: "", SecretAccessKey: "", SessionToken: "", ExpiredTime: "", CurrentTime:"", } });
上传前需要从服务端获取上传 sts2 签名,签名算法服务端接入,接入方法请参考以下服务端各生成上传凭证文档:
说明
由于签名计算放在前端会暴露 AccessKey 和 SecretKey,我们把签名计算过程放在后端实现,即利用签名 SDK 生成临时的 AK、SK 等;前端通过 http 请求向后端获取签名结果,正式部署时请在后端加一层您自己网站本身的权限检验。
设置监听事件,具体代码示例如下所示:
ttUploader.on("complete", (infor) => { console.log("complete"); console.log(infor.uploadResult); }); ttUploader.on("error", (infor) => { console.log(infor.extra); }); ttUploader.on("progress", (infor) => { console.log(infor.percent) });
详情请参考生命周期。
调用 start 方法,传入添加上传文件返回的key
值,具体代码示例如下所示:
ttUploader.start(Key);
配置属性可在实例化时传入,具体代码示例如下所示:
const ttUploader = new TTUploader({ userId: "xxx", appId: 666, imageConfig: { serviceId: "xxx" } });
各个配置及其对应作用如下表所示:
字段名 | 类型 | 是否必传 | 描述 |
---|---|---|---|
userId | String | 是 | 用户 ID,默认值为 null。用于进行单点追踪日志,定位某一个用户的日志,请设置一个唯一 ID。 |
appId | Number | 是 | 应用 ID。用于定位某一条业务线的日志,默认值为 null。 |
region | String | 否 | 上传地区。有以下三种取值:
|
imageConfig | Object | 是 | 图片上传专用配置,默认值为 null。 |
imageHost | String | 否 | 上传网关域名配置,各地区默认网关域名。 |
getSliceFunc | Function | 否 | 分片策略方法,返回分片大小值,回调入参一个参数为当前文件大小。默认为:当文件为 200M 以下时 5M 一片;当文件为 200M 以上时 10M 一片。 function(fileSize) { return fileSize > 200 * 1024 * 1024 ? 10 * 1024 * 1024 : 5 * 1024 * 1024 },分片值小于 2M 时,统一按 2M 分片。 |
useFileExtension | Boolean | 否 | 是否获取文件后缀名,开启由 SDK 读取文件后缀名作为 fileExtension 参数,以获取文件的存储 key。默认值为 false。 |
示例如下所示:
imageConfig: { serviceId: "xxx" //服务 ID。请在 veImageX 控制台-服务管理查看并记录该值。 }
字段名 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
serviceId | String | 是 | null | 服务 ID,您可进入服务管理创建服务后获取 serviceId 的值。 |
组件的方法及相关示例如下所示:
添加上传图片文件,支持返回当前文件的 key 值(上传和取消上传等使用该值)。传入的 imageFileOption 配置如下表所示:
字段名 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
file | Blob 或 Blob[] | 是 | null | 上传的文件,传入 file 数组时可批量上传。 |
stsToken | Object | 是 | null | 上传签名,token 是一个对象,包含AccessKeyId、SecretAccessKey、SessionToken、CurrentTime、ExpiredTime 属性。 |
storeKey | String 或 String[] | 否 | null | 上传文件的存储 key(仅支持[A-Za-z0-9-_./],不支持以 / 开头或结尾,不支持 / 连续出现),与 file 参数一一对应。默认使用随机生成的字符串作为存储 key。 |
serviceId | String | 否 | null | 用于在添加文件时指定 serviceId,如果不指定,则本次上传文件到初始化配置 imageConfig 中指定的 serviceId。 |
prefix | String | 否 | null | 上传文件的存储 key(不支持以 / 开头或结尾,不支持 / 连续出现),指定时下发的存储 key 将为 prefix/{随机key}{fileExtension}。仅当未指定 storeKey 时生效。 |
fileExtension | String | 否 | null | 指定文件扩展名,作为存储 key 的一部分(形如:.java, .txt, .png等)。仅当未指定 storeKey 时生效。 |
skipMeta | Boolean | 否 | false | 是否返回图片 meta 信息。 说明 获取 meta 并返回对应的 meta 信息,如果 meta 获取超时或失败,则对应的 meta 信息为空。 |
skipCommit | Boolean | 否 | false | 是否跳过上传成功后的上报阶段(可提高上传成功率,减少上传耗时)。如果指定为 true,则在控制台默认不展示该文件。 |
overwrite | Boolean | 否 | false | 是否开启重名覆盖上传,文件存储 key 相同时则为重名。开启后,新上传文件在上传路径及文件名重复时覆盖同名旧文件。若不开启,则新文件上传失败。取值如下所示:
注意 开启前,请确保您的上传 STS 签名已添加重名覆盖上传的标识。 |
const key = ttUploader.addImageFile({ file: file, // 上传的文件对象 stsToken: { AccessKeyId: "", SecretAccessKey: "", SessionToken: "", ExpiredTime: "", CurrentTime:"", }, }); console.log(key); // 返回的文件 key 值,例如:file_1495442273603_999031
修改初始化配置 imageConfig 中的 serviceId
,代码示例如下所示:
ttUploader.setServiceId('xxxxxxx');
启动图片上传任务。如果上传被暂停,则再次调用此方法时将从断点处开始上传。你需要传入文件的 key 值,若不传参数,则将开始所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
ttUploader.start();
移除某个待上传的文件(取消该文件的上传)。
说明
您可从 addImageFile 方法返回值中获取 key 值。
ttUploader.removeFile("file_1495442273603_999031");
取消某一正在上传的文件,同时删除暂存的上传信息。传入文件的 key 值,如果不传参数,则将取消所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
ttUploader.cancel();
暂停上传,将暂存当前文件的上传信息。传入文件的 key 值,如果不传参数,则将暂停所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
ttUploader.pause();
恢复上传。传入文件的 key 值,如果不传参数,则将恢复所有文件的上传。
说明
您可从 addImageFile 方法返回值中获取 key 值。
ttUploader.restart();
此处的生命周期是指上传某一个文件时候的生命周期,即一个上传过程的各个任务。
捕获某个生命周期,代码示例如下所示:
ttUploader.on("xxx", function(data) { console.log("xxx", data); });
生命周期各阶段如下表所示:
过程名称 | 描述 | 备注 |
---|---|---|
preUpload | 获取图片上传信息 | 初始化相关上传信息,比如 oid。 |
initUploadID | 初始化分片上传 | 仅大文件上传时会触发,完成后得到上传所需的 uploadID。 |
progress | 图片上传进行中 | 实时更新 percent(总体进度)。 |
complete | 图片上传完成 | 部分已开获取分片权限的用户,在上传完成后可得到 ImageUri 等上传结果。 |
在捕获每一个生命周期时都可获得描述当前状态的 data 信息,该信息在整个周期中不断完善,最终得到的 data 信息如下表所示:
字段名称 | 描述 |
---|---|
uploadResult | 上传完成后的各种信息,包括 uri 等,见下方详细说明(complete 获取) |
startTime | 文件开始上传的时间戳 |
endTime | 文件完成上传的时间戳 |
stageStartTime | 各阶段开始时间戳 |
stageEndTime | 各阶段完成时间戳 |
duration | 各阶段持续时间,计算公式:stageEndTime - stageStartTime |
extra | 当前状态的描述(随着生命周期不断变化) |
fileSize | 当前文件大小(crc32获取) |
key | 当前文件的 key(addImageFile时自动生成) |
percent | 当前上传总体进度百分比(%) |
signature | 上传所需的签名信息(preUpload 获取) |
sliceLength | 每一个分片的 size(crc32获取) |
stage | 当前所处生命周期,如果是不支持的浏览器,则该值为'browserError' |
status | 文件上传运行状态,支持以下取值:
|
task | task 队列实例 |
type | 当前任务状态,成功/失败 |
图片上传
字段名称 | 类型 | 描述 |
---|---|---|
ImageUri | String | 图片的 uri,格式为 bucket/oid |
ImageWidth | Number | 图片宽度 |
ImageHeight | Number | 图片高度 |
ImageMd5 | String | 图片数据的 md5 值 |
FileName | String | 文件名,与 ImageUri 中的 oid 部分一致 |
Uri | String | 与 ImageUri 一致 |
错误码 | 描述 |
---|---|
1000001 | addFile 的 file 属性不是 Blob/File 的实例 |
1000002 | 传入的 ststoken 有误 |
1001000 | apply 阶段请求失败-网络错误 |
1002000 | initUploadId 阶段请求失败-网络错误 |
1003000 | progress 阶段请求失败-网络错误 |
1003003 | 上传文件读取失败,一般出现在上传中的文件被删除的情况下 |
1004000 | merge 阶段请求失败-网络错误 |
1005000 | commit 阶段请求失败-网络错误 |
100006 | 请求过期或请求的签名时间来自未来,如果仅部分用户出现该问题,可能为系统时间不准导致 |
100009 | 请求的 AK 不合法 |
100026 | 错误的 STS or STS2,可能是多种错误,例如签名错误、过期等 |