@@ -33,7 +33,7 @@ interface UploadPartParams extends BasicWithAuthParams {
33
33
key ?: string
34
34
}
35
35
36
- interface ListMultipartUploadPartsParams extends BasicWithAuthParams {
36
+ interface ListPartsParams extends BasicWithAuthParams {
37
37
uploadId : string
38
38
bucket : string
39
39
key ?: string
@@ -44,7 +44,7 @@ export interface UploadedPart extends PartMeta {
44
44
putTime : number
45
45
}
46
46
47
- interface ListUploadPartsData {
47
+ interface ListPartsData {
48
48
uploadId : string
49
49
expireAt : number
50
50
partNumberMarker : number
@@ -87,6 +87,29 @@ interface GetChunkRequestPathParams extends BasicWithAuthParams {
87
87
key ?: string
88
88
}
89
89
90
+ interface MkblkParams extends BasicWithAuthParams {
91
+ // 第一个块的二进制内容
92
+ firstChunkBinary : UploadBlob
93
+ }
94
+
95
+ export interface MkblkData {
96
+ ctx : string
97
+ checksum : string
98
+ crc32 : number
99
+ offset : number
100
+ host : string
101
+ expired_at : number
102
+ }
103
+
104
+ interface MkfileParams extends BasicWithAuthParams {
105
+ fileSize : number // 资源文件大小,单位字节。
106
+ key ?: string // 进行URL 安全的 Base64 编码后的资源名。若未指定,则使用saveKey;若未指定 saveKey,则使用资源内容的 SHA1 值作为资源名。
107
+ fname ?: string // 进行URL安全的Base64编码后的文件名称。若未指定,则魔法变量中无法使用fname, ext, fprefix。
108
+ mimeType ?: string // 进行URL 安全的 Base64 编码后的文件 mimeType。若未指定,则根据文件内容自动检测 mimeType。
109
+ userVars ?: Record < string , string > // 指定自定义变量,进行URL 安全的 Base64 编码后的 user-var。
110
+ lastCtxOfBlock : string [ ]
111
+ }
112
+
90
113
interface DirectUploadParams extends BasicWithAuthParams {
91
114
file : UploadFile
92
115
fileName : string
@@ -174,6 +197,8 @@ export class UploadApis {
174
197
return parseResponseJson < InitPartsUploadData > ( response . result )
175
198
}
176
199
200
+ // v2 接口
201
+
177
202
async uploadPart ( params : UploadPartParams ) : Promise < Result < UploadChunkData > > {
178
203
const requestPathResult = await this . getBaseRequestPath ( params )
179
204
if ( ! isSuccessResult ( requestPathResult ) ) return requestPathResult
@@ -201,7 +226,7 @@ export class UploadApis {
201
226
return parseResponseJson < UploadChunkData > ( response . result )
202
227
}
203
228
204
- async listUploadParts ( params : ListMultipartUploadPartsParams ) : Promise < Result < ListUploadPartsData > > {
229
+ async listParts ( params : ListPartsParams ) : Promise < Result < ListPartsData > > {
205
230
const requestPathResult = await this . getBaseRequestPath ( params )
206
231
if ( ! isSuccessResult ( requestPathResult ) ) return requestPathResult
207
232
@@ -222,7 +247,7 @@ export class UploadApis {
222
247
return handleResponseError ( response . result )
223
248
}
224
249
225
- return parseResponseJson < ListUploadPartsData > ( response . result )
250
+ return parseResponseJson < ListPartsData > ( response . result )
226
251
}
227
252
228
253
async completeMultipartUpload ( params : CompleteMultipartUploadParams ) : Promise < Result < string > > {
@@ -296,6 +321,76 @@ export class UploadApis {
296
321
return { result : response . result . data }
297
322
}
298
323
324
+ // v1 接口
325
+
326
+ async mkblk ( params : MkblkParams ) : Promise < Result < MkblkData > > {
327
+ const blobSize = params . firstChunkBinary . size ( )
328
+ const url = `${ params . uploadHostUrl } /mkblk/${ blobSize } `
329
+ const headers = this . generateAuthHeaders ( params . token . signature )
330
+ headers [ 'content-type' ] = 'application/octet-stream'
331
+
332
+ const response = await this . httpClient . post ( url , {
333
+ headers,
334
+ abort : params . abort ,
335
+ body : params . firstChunkBinary ,
336
+ onProgress : params . onProgress
337
+ } )
338
+
339
+ if ( ! isSuccessResult ( response ) ) {
340
+ return response
341
+ }
342
+
343
+ if ( response . result . code !== 200 ) {
344
+ return handleResponseError ( response . result )
345
+ }
346
+
347
+ return parseResponseJson < MkblkData > ( response . result )
348
+ }
349
+
350
+ async mkfile ( params : MkfileParams ) : Promise < Result < string > > {
351
+ let url = `${ params . uploadHostUrl } /mkfile/${ params . fileSize } `
352
+
353
+ if ( params . key ) {
354
+ url += `/key/${ urlSafeBase64Encode ( params . key ) } `
355
+ }
356
+
357
+ if ( params . fname ) {
358
+ url += `/fname/${ urlSafeBase64Encode ( params . fname ) } `
359
+ }
360
+
361
+ if ( params . mimeType ) {
362
+ url += `/mimeType/${ urlSafeBase64Encode ( params . mimeType ) } `
363
+ }
364
+
365
+ if ( params . userVars && Array . isArray ( params . userVars ) ) {
366
+ for ( const [ key , value ] of Object . entries ( params . userVars ) ) {
367
+ url += `/x:${ key } /${ value } `
368
+ }
369
+ }
370
+
371
+ const headers = this . generateAuthHeaders ( params . token . signature )
372
+ headers [ 'content-type' ] = 'text/plain'
373
+
374
+ const response = await this . httpClient . post ( url , {
375
+ headers,
376
+ abort : params . abort ,
377
+ onProgress : params . onProgress ,
378
+ body : params . lastCtxOfBlock . join ( ',' )
379
+ } )
380
+
381
+ if ( ! isSuccessResult ( response ) ) {
382
+ return response
383
+ }
384
+
385
+ if ( response . result . code !== 200 ) {
386
+ return handleResponseError ( response . result )
387
+ }
388
+
389
+ return { result : response . result . data }
390
+ }
391
+
392
+ // 直传接口
393
+
299
394
async directUpload < T > ( params : DirectUploadParams ) : Promise < Result < string > > {
300
395
const formData = new HttpFormData ( )
301
396
formData . set ( 'token' , params . token . signature )
0 commit comments