Skip to content

Commit 6cfeb44

Browse files
committed
添加测试用例
1 parent 233a785 commit 6cfeb44

File tree

3 files changed

+127
-11
lines changed

3 files changed

+127
-11
lines changed

index.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,11 @@ export declare namespace resume_up {
304304
* @param mimeType 指定文件的mimeType
305305
* @param resumeRecordFile
306306
* @param progressCallback
307+
* @param version 分片上传版本 目前支持v1/v2版本 默认v1
308+
* @param partSize 分片上传v2必传字段 默认大小为4MB 分片大小范围为1 MB - 1 GB
307309
*/
308-
constructor(fname?: string, params?: any, mimeType?: string, resumeRecordFile?: string, progressCallback?: (data: any) => void);
310+
constructor(fname?: string, params?: any, mimeType?: string, resumeRecordFile?: string, version?:string, partSize?:bigint,
311+
progressCallback?: (data: any) => void);
309312
}
310313
}
311314

qiniu/storage/resume.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ function putReq (config, uploadToken, key, rsStream, rsStreamLen, putExtra, call
106106
uploadId: '',
107107
expiredAt: 0
108108
};
109-
var encodedObjectName = key ? util.urlsafeBase64Encode(key) : '~';
110109
// read resumeRecordFile
111110
if (putExtra.resumeRecordFile) {
112111
try {
@@ -138,9 +137,11 @@ function putReq (config, uploadToken, key, rsStream, rsStreamLen, putExtra, call
138137
finishedBlock = finishedEtags.etags.length;
139138
}
140139

140+
} else {
141+
throw new Error("分片上传版本号错误")
141142
}
142143
} catch (e) {
143-
// log(e);
144+
//log(e)
144145
}
145146
}
146147

@@ -192,6 +193,7 @@ function putReq (config, uploadToken, key, rsStream, rsStreamLen, putExtra, call
192193
});
193194

194195
} else if (putExtra.version === 'v2'){
196+
var encodedObjectName = key ? util.urlsafeBase64Encode(key) : '~';
195197
if (finishedEtags.uploadId) {
196198
//if it has resumeRecordFile
197199
resumUploadV2(uploadToken, bucket, encodedObjectName, upDomain, blkStream, isSent, readLen, curBlock, finishedEtags, finishedBlock,
@@ -201,6 +203,8 @@ function putReq (config, uploadToken, key, rsStream, rsStreamLen, putExtra, call
201203
initReq(uploadToken, bucket, encodedObjectName, upDomain, blkStream, isSent, readLen, curBlock, finishedEtags, finishedBlock,
202204
totalBlockNum, putExtra, rsStreamLen, rsStream, callbackFunc);
203205
}
206+
} else {
207+
throw new Error("分片上传版本号错误")
204208
}
205209
}
206210

@@ -282,7 +286,7 @@ function resumUploadV2(uploadToken, bucket, encodedObjectName, upDomain, blkStre
282286
blkStream.pause();
283287
partNumber = finishedBlock + 1;
284288
var bodyMd5 = util.getMd5(chunk);
285-
mkbklReqV2(bucket, upDomain, uploadToken, encodedObjectName, chunk, finishedEtags.uploadId, partNumber,
289+
uploadPart(bucket, upDomain, uploadToken, encodedObjectName, chunk, finishedEtags.uploadId, partNumber,
286290
function (respErr, respBody, respInfo) {
287291
if (respInfo.statusCode != 200 || respBody.md5 != bodyMd5) {
288292
callbackFunc(respErr, respBody, respInfo);
@@ -306,7 +310,7 @@ function resumUploadV2(uploadToken, bucket, encodedObjectName, upDomain, blkStre
306310
}
307311
blkStream.resume();
308312
if (finishedEtags.etags.length === totalBlockNum) {
309-
mkfileReqV2(upDomain, bucket, encodedObjectName, uploadToken, finishedEtags,
313+
completeParts(upDomain, bucket, encodedObjectName, uploadToken, finishedEtags,
310314
'', putExtra, callbackFunc);
311315
isSent = true;
312316
}
@@ -317,14 +321,14 @@ function resumUploadV2(uploadToken, bucket, encodedObjectName, upDomain, blkStre
317321

318322
blkStream.on('end', function () {
319323
if (!isSent && rsStreamLen === 0) {
320-
mkfileReqV2(upDomain, bucket, encodedObjectName, uploadToken, finishedEtags,
324+
completeParts(upDomain, bucket, encodedObjectName, uploadToken, finishedEtags,
321325
'', putExtra, callbackFunc);
322326
}
323327
destroy(rsStream);
324328
});
325329
}
326330

327-
function mkbklReqV2(bucket, upDomain, uploadToken, encodedObjectName, chunk, uploadId, partNumber, callbackFunc) {
331+
function uploadPart(bucket, upDomain, uploadToken, encodedObjectName, chunk, uploadId, partNumber, callbackFunc) {
328332
var headers = {
329333
Authorization: 'UpToken ' + uploadToken,
330334
'Content-Type': 'application/octet-stream',
@@ -335,7 +339,7 @@ function mkbklReqV2(bucket, upDomain, uploadToken, encodedObjectName, chunk, upl
335339
rpc.put(requestUrl, chunk, headers, callbackFunc);
336340
}
337341

338-
function mkfileReqV2(upDomain, bucket, encodedObjectName, uploadToken, finishedEtags,
342+
function completeParts(upDomain, bucket, encodedObjectName, uploadToken, finishedEtags,
339343
customVars, putExtra, callbackFunc) {
340344
var headers = {
341345
Authorization: 'UpToken ' + uploadToken,

test/resume_up.test.js

Lines changed: 112 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,13 @@ describe('test resume up', function () {
211211
});
212212
});
213213

214-
it('test resume up#putStream resume_v2', function (done) {
214+
it('test resume up#putStream resume_v2_2m', function (done) {
215215
config.zone = null;
216216

217-
var key = 'storage_putStream_resume_test_v2' + Math.random(1000);
217+
var key = 'storage_putStream_resume_test_v2_2m' + Math.random(1000);
218218
var stream = new Readable();
219219
var blkSize = 1024 * 1024;
220-
var blkCnt = 5;
220+
var blkCnt = 2;
221221
for (var i = 0; i < blkCnt; i++) {
222222
stream.push(crypto.randomBytes(blkSize));
223223
}
@@ -246,5 +246,114 @@ describe('test resume up', function () {
246246
keysToDelete.push(respBody.key);
247247
});
248248
});
249+
250+
it('test resume up#putStream resume_v2_4m', function (done) {
251+
config.zone = null;
252+
253+
var key = 'storage_putStream_resume_test_v2_4m' + Math.random(1000);
254+
var stream = new Readable();
255+
var blkSize = 1024 * 1024;
256+
var blkCnt = 4;
257+
for (var i = 0; i < blkCnt; i++) {
258+
stream.push(crypto.randomBytes(blkSize));
259+
}
260+
stream.push(null);
261+
var tmpfile = path.join(os.tmpdir(), '/resume_file');
262+
fs.writeFileSync(tmpfile, '');
263+
putExtra.resumeRecordFile = tmpfile;
264+
putExtra.partSize = 6 * 1024 * 1024
265+
putExtra.version = 'v2'
266+
putExtra.progressCallback = function (len, total) {
267+
if (len === total) {
268+
var content = fs.readFileSync(tmpfile);
269+
var data = JSON.parse(content);
270+
data.etags.forEach(function (item) {
271+
item.should.have.keys('etag', 'partNumber');
272+
});
273+
}
274+
};
275+
resumeUploader.putStream(uploadToken, key, stream, blkCnt * blkSize, putExtra,
276+
function (
277+
respErr,
278+
respBody, respInfo) {
279+
console.log(respBody, respInfo);
280+
should.not.exist(respErr);
281+
respBody.should.have.keys('key', 'hash');
282+
keysToDelete.push(respBody.key);
283+
});
284+
});
285+
286+
it('test resume up#putStream resume_v2_6m', function (done) {
287+
config.zone = null;
288+
289+
var key = 'storage_putStream_resume_test_v2_6m' + Math.random(1000);
290+
var stream = new Readable();
291+
var blkSize = 1024 * 1024;
292+
var blkCnt = 6;
293+
for (var i = 0; i < blkCnt; i++) {
294+
stream.push(crypto.randomBytes(blkSize));
295+
}
296+
stream.push(null);
297+
var tmpfile = path.join(os.tmpdir(), '/resume_file');
298+
fs.writeFileSync(tmpfile, '');
299+
putExtra.resumeRecordFile = tmpfile;
300+
putExtra.partSize = 6 * 1024 * 1024
301+
putExtra.version = 'v2'
302+
putExtra.progressCallback = function (len, total) {
303+
if (len === total) {
304+
var content = fs.readFileSync(tmpfile);
305+
var data = JSON.parse(content);
306+
data.etags.forEach(function (item) {
307+
item.should.have.keys('etag', 'partNumber');
308+
});
309+
}
310+
};
311+
resumeUploader.putStream(uploadToken, key, stream, blkCnt * blkSize, putExtra,
312+
function (
313+
respErr,
314+
respBody, respInfo) {
315+
console.log(respBody, respInfo);
316+
should.not.exist(respErr);
317+
respBody.should.have.keys('key', 'hash');
318+
keysToDelete.push(respBody.key);
319+
});
320+
});
321+
322+
it('test resume up#putStream resume_v2_10m', function (done) {
323+
config.zone = null;
324+
325+
var key = 'storage_putStream_resume_test_v2_10m' + Math.random(1000);
326+
var stream = new Readable();
327+
var blkSize = 1024 * 1024;
328+
var blkCnt = 10;
329+
for (var i = 0; i < blkCnt; i++) {
330+
stream.push(crypto.randomBytes(blkSize));
331+
}
332+
stream.push(null);
333+
var tmpfile = path.join(os.tmpdir(), '/resume_file');
334+
fs.writeFileSync(tmpfile, '');
335+
putExtra.resumeRecordFile = tmpfile;
336+
putExtra.partSize = 6 * 1024 * 1024
337+
putExtra.version = 'v2'
338+
putExtra.progressCallback = function (len, total) {
339+
if (len === total) {
340+
var content = fs.readFileSync(tmpfile);
341+
var data = JSON.parse(content);
342+
data.etags.forEach(function (item) {
343+
item.should.have.keys('etag', 'partNumber');
344+
});
345+
}
346+
};
347+
resumeUploader.putStream(uploadToken, key, stream, blkCnt * blkSize, putExtra,
348+
function (
349+
respErr,
350+
respBody, respInfo) {
351+
console.log(respBody, respInfo);
352+
should.not.exist(respErr);
353+
respBody.should.have.keys('key', 'hash');
354+
keysToDelete.push(respBody.key);
355+
});
356+
});
357+
249358
});
250359
});

0 commit comments

Comments
 (0)