ks3-js-sdk
Version:
js sdk for ks3
142 lines (141 loc) • 5.06 kB
JavaScript
describe('分块上传相关操作', function () {
var key = 'demo.txt';
var file = blob({ size: 1024 * 1024 * 15 });
var uploadId = '';
var sliceList = [];
var uploadPartList = [];
describe('分块上传文件', function () {
it('初始化分块上传', function (done) {
this.timeout(2000);
ks3.initiateMultipartUpload({
key,
file,
}).then(res => {
uploadId = data.body.InitiateMultipartUploadResult.UploadId;
should.not.exist(res.error);
data.statusCode.should.be.equal(200);
done();
})
})
it('给文件分块', function (done) {
this.timeout(2000);
// 获取文件块数
let totalSize = file.size;
let chunkSize = ks3.config.chunkSize;
let chunkNum = Math.ceil(totalSize / chunkSize);
// 上传的分片数据
for (let i = 1; i <= chunkNum; i++) {
// 给文件分块
let endSize = i == chunkNum ? totalSize : chunkSize * i;
fileSlice(file, chunkSize * (i - 1), endSize, function (result) {
sliceList.push({
key: key,
partNumber: i,
body: result,
uploadId: uploadId,
uploadType: 'upload',
})
if (sliceList.length === chunkNum) {
done()
}
});
};
})
it('上传文件块', function (done) {
this.timeout(20000);
var num = 0;
sliceList.forEach(item => {
ks3.uploadPart(item).then(res => {
uploadPartList.push({
partNumber: item.partNumber,
etag: data.headers.etag
});
should.not.exist(res.error);
data.statusCode.should.be.equal(200);
num++;
console.log('已上传' + num + '块,一共有' + sliceList.length + '块')
if (num === sliceList.length) {
done();
}
})
})
})
it('获取当前任务已上传的分块', function (done) {
this.timeout(2000);
ks3.listParts({
key,
uploadId
}).then(res => {
data.body['ns2:ListPartsResult']['ns2:Part'].length.should.be.equal(sliceList.length);
should.not.exist(res.error);
data.statusCode.should.be.equal(200);
done();
})
})
it('完成分块上传,合并分块', function (done) {
this.timeout(2000);
ks3.completeMultipart({
key,
uploadId,
parts: uploadPartList
}).then(res => {
should.not.exist(res.error);
data.statusCode.should.be.equal(200);
done();
})
})
it('获取文件信息', function (done) {
this.timeout(2000);
ks3.listObjects({
prefix: key
}).then(res => {
let contents = data.body.ListBucketResult.Contents;
let object;
if (contents instanceof Array) {
object = contents.find((item) => item.Key === key);
} else {
object = contents;
}
object.Size.should.be.equal(file.size.toString());
should.not.exist(res.error);
data.statusCode.should.be.equal(200);
done();
})
})
it('删除文件', function (done) {
this.timeout(2000);
ks3.delObject({
key
}).then(res => {
should.not.exist(res.error);
data.statusCode.should.be.equal(204);
done();
})
})
})
describe('取消分块上传', function () {
it('初始化分块上传', function (done) {
this.timeout(2000);
ks3.initiateMultipartUpload({
key,
file
}).then(res => {
uploadId = data.body.InitiateMultipartUploadResult.UploadId;
should.not.exist(res.error);
data.statusCode.should.be.equal(200);
done();
})
})
it('取消分块上传', function (done) {
this.timeout(2000);
ks3.abortMultipartUpload({
key,
uploadId
}).then(res => {
should.not.exist(res.error);
data.statusCode.should.be.equal(204);
done();
})
})
})
})