Skip to content

Commit c4214e4

Browse files
author
winddies
authored
对接 KODO 新上传 API (#448)
* 对接 new api * 更新文档 & 修改说明 * 更新文档说明 * 更新文档说明 * 修复 uploadId 导致的上传出错 & 调整部分文档及代码 * fix review * fix review part-2 * fix review part-3 * review end
1 parent 5582909 commit c4214e4

23 files changed

+1273
-849
lines changed

.babelrc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"useBuiltIns": "usage", // 在文件需要的位置单独按需引入 polyfill
77
"targets": {
88
"browsers": ["last 2 versions", "ie >= 8"]
9-
}
9+
},
10+
"modules": "commonjs"
1011
}
1112
]
1213
],
@@ -18,5 +19,6 @@
1819
}
1920
],
2021
"@babel/proposal-object-rest-spread"
21-
]
22+
],
23+
"ignore": ["**/*.d.ts", "**/*.js.map"]
2224
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ dist
88
test/config.json
99
coverage
1010
lib
11+
esm

README.md

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
基于七牛 API 开发的前端 JavaScript SDK
44

5-
## 当前版本为 2.x,查看 1.x 的文档请点击[这里](https://github.com/qiniu/js-sdk/tree/1.x)
5+
## 当前版本为 3.x,旧版本文档:[2.x](https://github.com/qiniu/js-sdk/tree/2.x)[1.x](https://github.com/qiniu/js-sdk/tree/1.x)
66

77
## 快速导航
88

@@ -133,7 +133,7 @@ qiniu.compressImage(file, options).then(data => {
133133
```
134134
## API Reference Interface
135135

136-
### qiniu.upload(file: File, key: string, token: string, putExtra: object, config: object): observable
136+
### qiniu.upload(file: File, key: string, token: string, putExtra?: object, config?: object): observable
137137

138138
* **observable**: 为一个带有 subscribe 方法的类实例
139139

@@ -154,10 +154,14 @@ qiniu.compressImage(file, options).then(data => {
154154
}
155155
}
156156
```
157-
* next: 接收上传进度信息,res是一个带有 `total` 字段的 `object`,包含`loaded``total``percent`三个属性,提供上传进度信息。
158-
* total.loaded: `number`,已上传大小,单位为字节。
159-
* total.total: `number`,本次上传的总量控制信息,单位为字节,注意这里的 total 跟文件大小并不一致。
160-
* total.percent: `number`,当前上传进度,范围:0100
157+
* next: 接收上传进度信息的回调函数,回调函数参数值为 `object`,包含字段信息如下:
158+
* uploadInfo: `object`,只有分片上传时才返回该字段
159+
* uploadInfo.id: 上传任务的唯一标识。
160+
* uploadInfo.url: 上传地址。
161+
* total: 包含`loaded``total``percent`三个属性:
162+
* total.loaded: `number`,已上传大小,单位为字节。
163+
* total.total: `number`,本次上传的总量控制信息,单位为字节,注意这里的 total 跟文件大小并不一致。
164+
* total.percent: `number`,当前上传进度,范围:0100
161165

162166
* error: 上传错误后触发;自动重试本身并不会触发该错误,而当重试次数到达上限后则可以触发。当不是 xhr 请求错误时,会把当前错误产生原因直接抛出,诸如 JSON 解析异常等;当产生 xhr 请求错误时,参数 err 为一个包含 `code``message``isRequestError` 三个属性的 `object`
163167
* err.isRequestError: 用于区分是否 xhr 请求错误;当 xhr 请求出现错误并且后端通过 HTTP 状态码返回了错误信息时,该参数为 `true`;否则为 `undefined`
@@ -169,10 +173,11 @@ qiniu.compressImage(file, options).then(data => {
169173

170174
* subscription: 为一个带有 `unsubscribe` 方法的类实例,通过调用 `subscription.unsubscribe()` 停止当前文件上传。
171175

176+
* **bucket**: 上传的目标空间
172177
* **file**: `File` 对象,上传的文件
173178
* **key**: 文件资源名
174179
* **token**: 上传验证信息,前端通过接口请求后端获得
175-
* **config**: `object`
180+
* **config**: `object`,其中的每一项都为可选
176181

177182
```JavaScript
178183
const config = {
@@ -189,39 +194,24 @@ qiniu.compressImage(file, options).then(data => {
189194
* config.concurrentRequestLimit: 分片上传的并发请求量,`number`,默认为3;因为浏览器本身也会限制最大并发量,所以最大并发量与浏览器有关。
190195
* config.checkByMD5: 是否开启 MD5 校验,为布尔值;在断点续传时,开启 MD5 校验会将已上传的分片与当前分片进行 MD5 值比对,若不一致,则重传该分片,避免使用错误的分片。读取分片内容并计算 MD5 需要花费一定的时间,因此会稍微增加断点续传时的耗时,默认为 false,不开启。
191196
* config.forceDirect: 是否上传全部采用直传方式,为布尔值;为 `true` 时则上传方式全部为直传 form 方式,禁用断点续传,默认 `false`
197+
* config.chunkSize: `number`,分片上传时每片的大小,必须为正整数,单位为 `MB`,且最大不能超过 1024,默认值 4。因为 chunk 数最大 10000,所以如果文件以你所设的 `chunkSize` 进行分片并且 chunk 数超过 10000,我们会把你所设的 `chunkSize` 扩大二倍,如果仍不符合则继续扩大,直到符合条件。
192198

193-
* **putExtra**:
199+
* **putExtra**: `object`,其中的每一项都为可选
194200

195201
```JavaScript
196202
const putExtra = {
197-
fname: "",
198-
params: {},
199-
mimeType: [] || null
203+
fname: "qiniu.txt",
204+
mimeType: "text/plain",
205+
customVars: { 'x:test': 'qiniu', ... },
206+
metadata: { 'x-qn-meta': 'qiniu', ... },
200207
};
201208
```
202209

203-
* fname: `string`,文件原文件名
204-
* params: `object`,用来放置自定义变量,变量名必须以 `x:` 开始,自定义变量格式及说明请参考[文档](https://developer.qiniu.com/kodo/manual/1235/vars)
205-
* mimeType: `null || array`,用来限制上传文件类型,为 `null` 时表示不对文件类型限制;限制类型放到数组里:
206-
`["image/png", "image/jpeg", "image/gif"]`
207-
208-
### qiniu.createMkFileUrl(url: string, file: File, key: string, putExtra: object): string
209-
210-
返回创建文件的 url;当分片上传时,我们需要把分片返回的 ctx 信息拼接后通过该 url 上传给七牛以创建文件。
211-
212-
* **url**: 上传域名,可以通过qiniu.getUploadUrl()获得
213-
* **file**: 文件对象
214-
* **key**: 文件资源名
215-
* **putExtra**: 同上
216-
217-
```JavaScript
218-
const requestUrl = qiniu.createMkFileUrl(
219-
uploadUrl,
220-
file,
221-
key,
222-
putExtra
223-
);
224-
```
210+
* fname: `string`,文件原始文件名,若未指定,则魔法变量中无法使用 fname、ext、suffix
211+
* customVars: `object`,用来放置自定义变量,变量名必须以 `x:` 开始,自定义变量格式及说明请参考[文档](https://developer.qiniu.com/kodo/manual/1235/vars)
212+
* metadata: `object`,用来防止自定义 meta,变量名必须以 `x-qn-meta-`开始,自定义资源信息格式及说明请参考
213+
[文档](https://developer.qiniu.com/kodo/api/1252/chgm)
214+
* mimeType: `string`,指定所传的文件类型
225215

226216
### qiniu.region: object
227217

@@ -248,31 +238,10 @@ qiniu.compressImage(file, options).then(data => {
248238
const headers = qiniu.getHeadersForChunkUpload(token)
249239
```
250240

251-
### qiniu.getHeadersForMkFile(token: string): object
241+
### qiniu.deleteUploadedChunks(token: string, key: stting, uploadInfo: object): Promise<void>
242+
删除指定上传任务中已上传完成的片,`key` 为目标文件名,`uploadInfo` 可通过 `next` 的返回获取,`token` 由服务端生成
252243

253-
返回 `object`,包含用来获得文件创建的头信息,参数为 `token` 字符串;当分片上传完需要把 ctx 信息传给七牛用来创建文件时,请求需要带该函数返回的头信息
254-
255-
```JavaScript
256-
const headers = qiniu.getHeadersForMkFile(token)
257-
```
258-
259-
### qiniu.getResumeUploadedSize(file: File): number
260-
断点续传时返回文件之前已上传的字节数,为 0 代表当前并无该文件的断点信息
261-
262-
### qiniu.filterParams(params: object): array
263-
264-
返回[[k, v],...]格式的数组,k 为自定义变量 `key` 名,v 为自定义变量值,用来提取 `putExtra.params` 包含的自定义变量
265-
266-
```JavaScript
267-
const customVarList = qiniu.filterParams(putExtra.params)
268-
269-
for (let i = 0; i < customVarList.length; i++) {
270-
const k = customVarList[i]
271-
multipart_params_obj[k[0]] = k[1]
272-
}
273-
```
274-
###
275-
### qiniu.compressImage(file: File, options: object) : Promise (上传前图片压缩)
244+
### qiniu.compressImage(file: File, options: object): Promise<CompressResult> (上传前图片压缩)
276245

277246
```JavaScript
278247
const imgLink = qiniu.compressImage(file, options).then(res => {
@@ -291,6 +260,10 @@ qiniu.compressImage(file, options).then(data => {
291260
* options.maxHeight: `number`,压缩图片的最大高度值
292261
(注意:当 `maxWidth``maxHeight` 都不设置时,则采用原图尺寸大小)
293262
* options.noCompressIfLarger: `boolean`,为 `true` 时如果发现压缩后图片大小比原来还大,则返回源图片(即输出的 dist 直接返回了输入的 file);默认 `false`,即保证图片尺寸符合要求,但不保证压缩后的图片体积一定变小
263+
* CompressResult: `object`,包含如下字段:
264+
* dist: 压缩后输出的 File 对象,或原始的 file,具体看下面的 options 配置
265+
* width: 压缩后的图片宽度
266+
* height: 压缩后的图片高度
294267

295268
### qiniu.watermark(options: object, key?: string, domain?: string): string(水印)
296269

0 commit comments

Comments
 (0)