Skip to content

Commit 236da61

Browse files
YangSen-qnYangSen-qn
andauthored
feat: resumable upload default use v2 (#446)
Co-authored-by: YangSen-qn <yangsen@qiniu.com>
1 parent 9b844c4 commit 236da61

File tree

5 files changed

+140
-13
lines changed

5 files changed

+140
-13
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## CHANGE LOG
22

3+
## 7.15.0
4+
- 对象存储,分片上传默认使用分片 v2
5+
36
## 7.14.0
47
- 对象存储,持久化处理支持工作流模版
58
- 对象存储,修复持久化处理闲时任务的类型声明

examples/resume_upload_simple.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@ putExtra.progressCallback = function (uploadBytes, totalBytes) {
3030
};
3131

3232
// file
33-
resumeUploader.putFile(uploadToken, null, localFile, putExtra)
34-
.then(({ data, resp }) => {
33+
resumeUploader.putFileV2(uploadToken, null, localFile, putExtra)
34+
.then(({
35+
data,
36+
resp
37+
}) => {
3538
if (resp.statusCode === 200) {
3639
console.log(data);
3740
} else {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "qiniu",
3-
"version": "7.14.0",
3+
"version": "7.15.0",
44
"description": "Node wrapper for Qiniu Resource (Cloud) Storage API",
55
"main": "index.js",
66
"directories": {

qiniu/storage/resume.js

Lines changed: 126 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const mkdirp = require('mkdirp');
1313
const conf = require('../conf');
1414
const util = require('../util');
1515
const rpc = require('../rpc');
16+
const libUtil = require('util');
1617

1718
const { SERVICE_NAME } = require('../httpc/region');
1819
const { ResponseWrapper } = require('../httpc/responseWrapper');
@@ -30,7 +31,10 @@ const {
3031
} = require('./internal');
3132

3233
exports.ResumeUploader = ResumeUploader;
33-
exports.PutExtra = PutExtra;
34+
exports.PutExtra = libUtil.deprecate(
35+
PutExtra,
36+
'PutExtra constructor is deprecated. Use PutExtra.create() for v2 uploads or explicitly specify version parameter.'
37+
);
3438
exports.createResumeRecorder = createResumeRecorder;
3539
exports.createResumeRecorderSync = createResumeRecorderSync;
3640

@@ -58,13 +62,13 @@ function ResumeUploader (config) {
5862
*/
5963

6064
/**
61-
* 上传可选参数
65+
* 上传可选参数,分片上传默认使用 v1 版本
6266
* @class
6367
* @constructor
6468
* @param {string} [fname] 请求体中的文件的名称
6569
* @param {Object} [params] 额外参数设置,参数名称必须以x:开头
6670
* @param {string | null} [mimeType] 指定文件的mimeType
67-
* @param {string | null} [resumeRecordFile] DEPRECATED: 使用 `` 与 `` 代替;断点续传的已上传的部分信息记录文件路径
71+
* @param {string | null} [resumeRecordFile] DEPRECATED: 使用 `resumeRecorder` 与 `resumeKey` 代替;断点续传的已上传的部分信息记录文件路径
6872
* @param {function(number, number):void} [progressCallback] 上传进度回调,回调参数为 (uploadBytes, totalBytes)
6973
* @param {number} [partSize] 分片上传v2必传字段 默认大小为4MB 分片大小范围为1 MB - 1 GB
7074
* @param {'v1' | 'v2'} [version] 分片上传版本 目前支持v1/v2版本 默认v1
@@ -97,6 +101,39 @@ function PutExtra (
97101
this.resumeKey = resumeKey || null;
98102
}
99103

104+
/**
105+
* 上传可选参数,分片上传默认使用 v2 版本
106+
* @class
107+
* @constructor
108+
* @param {string} [fname] 请求体中的文件的名称
109+
* @param {Object} [params] 额外参数设置,参数名称必须以x:开头
110+
* @param {string | null} [mimeType] 指定文件的mimeType
111+
* @param {string | null} [resumeRecordFile] DEPRECATED: 使用 `resumeRecorder` 与 `resumeKey` 代替;断点续传的已上传的部分信息记录文件路径
112+
* @param {function(number, number):void} [progressCallback] 上传进度回调,回调参数为 (uploadBytes, totalBytes)
113+
* @param {number} [partSize] 分片上传v2必传字段 默认大小为4MB 分片大小范围为1 MB - 1 GB
114+
* @param {'v1' | 'v2'} [version] 分片上传版本 目前支持v1/v2版本 默认v2
115+
* @param {Object} [metadata] 元数据设置,参数名称必须以 x-qn-meta-${name}: 开头
116+
* @param {JsonFileRecorder} [resumeRecorder] 通过 `createResumeRecorder` 或 `createResumeRecorderSync` 获取,优先级比 `resumeRecordFile` 低
117+
* @param {string} [resumeKey] 断点续传记录文件的具体文件名,不设置时会由当次上传自动生成
118+
*/
119+
PutExtra.create = function (
120+
fname,
121+
params,
122+
mimeType,
123+
resumeRecordFile,
124+
progressCallback,
125+
partSize,
126+
version,
127+
metadata,
128+
resumeRecorder,
129+
resumeKey) {
130+
return new PutExtra(
131+
fname, params, mimeType, resumeRecordFile,
132+
progressCallback, partSize, version || 'v2',
133+
metadata, resumeRecorder, resumeKey
134+
);
135+
};
136+
100137
/**
101138
* @private
102139
* @param {Object} options
@@ -222,6 +259,7 @@ function _getRegionsRetrier (options) {
222259
*/
223260

224261
/**
262+
* @deprecated use putStreamV2 instead
225263
* @param {string} uploadToken
226264
* @param {string | null} key
227265
* @param {stream.Readable} rsStream
@@ -237,11 +275,45 @@ ResumeUploader.prototype.putStream = function (
237275
rsStreamLen,
238276
putExtra,
239277
callbackFunc
278+
) {
279+
// PutExtra
280+
putExtra = getDefaultPutExtra(
281+
putExtra,
282+
{
283+
key
284+
}
285+
);
286+
return this.putStreamV2(
287+
uploadToken,
288+
key,
289+
rsStream,
290+
rsStreamLen,
291+
putExtra,
292+
callbackFunc
293+
);
294+
};
295+
296+
/**
297+
* @param {string} uploadToken
298+
* @param {string | null} key
299+
* @param {stream.Readable} rsStream
300+
* @param {number} rsStreamLen
301+
* @param {PutExtra} putExtra
302+
* @param {reqCallback} [callbackFunc]
303+
* @returns {Promise<UploadResult>}
304+
*/
305+
ResumeUploader.prototype.putStreamV2 = function (
306+
uploadToken,
307+
key,
308+
rsStream,
309+
rsStreamLen,
310+
putExtra,
311+
callbackFunc
240312
) {
241313
const preferredScheme = this.config.useHttpsDomain ? 'https' : 'http';
242314

243315
// PutExtra
244-
putExtra = getDefaultPutExtra(
316+
putExtra = getDefaultPutExtraV2(
245317
putExtra,
246318
{
247319
key
@@ -847,6 +919,7 @@ function completeParts (
847919
}
848920

849921
/**
922+
* @deprecated Use putFileV2 instead
850923
* @param {string} uploadToken
851924
* @param {string | null} key
852925
* @param {string} localFile
@@ -860,11 +933,31 @@ ResumeUploader.prototype.putFile = function (
860933
localFile,
861934
putExtra,
862935
callbackFunc
936+
) {
937+
// PutExtra
938+
putExtra = putExtra || new PutExtra();
939+
return this.putFileV2(uploadToken, key, localFile, putExtra, callbackFunc);
940+
};
941+
942+
/**
943+
* @param {string} uploadToken
944+
* @param {string | null} key
945+
* @param {string} localFile
946+
* @param {PutExtra} putExtra
947+
* @param {reqCallback} [callbackFunc]
948+
* @returns {Promise<UploadResult>}
949+
*/
950+
ResumeUploader.prototype.putFileV2 = function (
951+
uploadToken,
952+
key,
953+
localFile,
954+
putExtra,
955+
callbackFunc
863956
) {
864957
const preferredScheme = this.config.useHttpsDomain ? 'https' : 'http';
865958

866959
// PutExtra
867-
putExtra = putExtra || new PutExtra();
960+
putExtra = putExtra || PutExtra.create();
868961
if (!putExtra.mimeType) {
869962
putExtra.mimeType = mime.getType(localFile);
870963
}
@@ -929,6 +1022,7 @@ ResumeUploader.prototype.putFile = function (
9291022
};
9301023

9311024
/**
1025+
* @deprecated use putFileWithoutKeyV2 instead
9321026
* @param {string} uploadToken
9331027
* @param {string} localFile
9341028
* @param {PutExtra} putExtra
@@ -944,6 +1038,22 @@ ResumeUploader.prototype.putFileWithoutKey = function (
9441038
return this.putFile(uploadToken, null, localFile, putExtra, callbackFunc);
9451039
};
9461040

1041+
/**
1042+
* @param {string} uploadToken
1043+
* @param {string} localFile
1044+
* @param {PutExtra} putExtra
1045+
* @param {reqCallback} [callbackFunc]
1046+
* @returns {Promise<UploadResult>}
1047+
*/
1048+
ResumeUploader.prototype.putFileWithoutKeyV2 = function (
1049+
uploadToken,
1050+
localFile,
1051+
putExtra,
1052+
callbackFunc
1053+
) {
1054+
return this.putFileV2(uploadToken, null, localFile, putExtra, callbackFunc);
1055+
};
1056+
9471057
/**
9481058
* @param {PutExtra} putExtra
9491059
* @param {Object} options
@@ -976,6 +1086,17 @@ function getDefaultPutExtra (putExtra, options) {
9761086
return putExtra;
9771087
}
9781088

1089+
/**
1090+
* @param {PutExtra} putExtra
1091+
* @param {Object} options
1092+
* @param {string | null} [options.key]
1093+
* @returns {PutExtra}
1094+
*/
1095+
function getDefaultPutExtraV2 (putExtra, options) {
1096+
putExtra = putExtra || PutExtra.create();
1097+
return getDefaultPutExtra(putExtra, options);
1098+
}
1099+
9791100
/**
9801101
* @class
9811102
* @param {string} baseDirPath

test/resume_up.test.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ describe('test resume up', function () {
200200
}
201201

202202
const promises = doAndWrapResultPromises(callback =>
203-
resumeUploader.putFileWithoutKey(
203+
resumeUploader.putFileWithoutKeyV2(
204204
uploadToken,
205205
testFilePath,
206206
putExtra,
@@ -270,7 +270,7 @@ describe('test resume up', function () {
270270
const key = 'storage_putFile_test' + Math.floor(Math.random() * 100000);
271271

272272
const promises = doAndWrapResultPromises(callback =>
273-
resumeUploader.putFile(
273+
resumeUploader.putFileV2(
274274
uploadToken,
275275
key,
276276
testFilePath,
@@ -331,7 +331,7 @@ describe('test resume up', function () {
331331
}
332332

333333
it(`test resume up#putStream; ${msg}`, function () {
334-
const putExtra = new qiniu.resume_up.PutExtra();
334+
const putExtra = qiniu.resume_up.PutExtra.create();
335335
if (version !== undefined) {
336336
putExtra.version = version;
337337
}
@@ -351,7 +351,7 @@ describe('test resume up', function () {
351351
} = createRandomStreamAndMD5(streamSize);
352352

353353
const promises = doAndWrapResultPromises(callback =>
354-
resumeUploader.putStream(
354+
resumeUploader.putStreamV2(
355355
uploadToken,
356356
key,
357357
stream,
@@ -567,7 +567,7 @@ describe('test resume up', function () {
567567
putExtra.progressCallback = (_uploaded, _total) => {
568568
throw new Error('mocked error');
569569
};
570-
return resumeUploader.putFile(
570+
return resumeUploader.putFileV2(
571571
uploadToken,
572572
key,
573573
filePath,

0 commit comments

Comments
 (0)