Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 56 additions & 2 deletions qiniu/rs.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,36 @@ Client.prototype.move = function(bucketSrc, keySrc, bucketDest, keyDest, onret)
rpc.postWithoutForm(uri, digest, onret);
}

Client.prototype.forceMove = function(bucketSrc, keySrc, bucketDest, keyDest, force, onret) {

var encodedEntryURISrc = getEncodedEntryUri(bucketSrc, keySrc);
var encodedEntryURIDest = getEncodedEntryUri(bucketDest, keyDest);
var uri = conf.RS_HOST + '/move/' + encodedEntryURISrc + '/' + encodedEntryURIDest +'/force/'+force;

var digest = util.generateAccessToken(uri, null);
rpc.postWithoutForm(uri, digest, onret);
}

Client.prototype.copy = function(bucketSrc, keySrc, bucketDest, keyDest, onret) {
var encodedEntryURISrc = getEncodedEntryUri(bucketSrc, keySrc);
var encodedEntryURIDest = getEncodedEntryUri(bucketDest, keyDest);
var uri = conf.RS_HOST + '/copy/' + encodedEntryURISrc + '/' + encodedEntryURIDest;

var digest = util.generateAccessToken(uri, null);
rpc.postWithoutForm(uri, digest, onret);
}

Client.prototype.forceCopy = function(bucketSrc, keySrc, bucketDest, keyDest, force, onret) {

var encodedEntryURISrc = getEncodedEntryUri(bucketSrc, keySrc);
var encodedEntryURIDest = getEncodedEntryUri(bucketDest, keyDest);
var uri = conf.RS_HOST + '/copy/' + encodedEntryURISrc + '/' + encodedEntryURIDest +'/force/'+force;

var digest = util.generateAccessToken(uri, null);
rpc.postWithoutForm(uri, digest, onret);
}


Client.prototype.fetch = function(url, bucket, key, onret) {
var bucketUri = getEncodedEntryUri(bucket, key);
var fetchUrl = util.urlsafeBase64Encode(url);
Expand Down Expand Up @@ -94,8 +116,15 @@ function EntryPathPair(src, dest) {
this.dest = dest || null;
}

EntryPathPair.prototype.toStr = function(op) {
return 'op=/' + op + '/' + this.src.encode() + '/' + this.dest.encode() + '&';
EntryPathPair.prototype.toStr = function(op, force) {
if(typeof(force)=='undefined'){

return 'op=/' + op + '/' + this.src.encode() + '/' + this.dest.encode() + '&';

}else{

return 'op=/' + op + '/' + this.src.encode() + '/' + this.dest.encode() + '/force/' + force + '&';
}
}

function BatchItemRet(error, code) {
Expand All @@ -121,10 +150,23 @@ Client.prototype.batchMove = function(entries, onret) {
fileHandle('move', entries, onret);
}

Client.prototype.forceBatchMove = function(entries, force, onret) {

fileHandleForce('move', entries, force, onret);

}

Client.prototype.batchCopy = function(entries, onret) {
fileHandle('copy', entries, onret);
}

Client.prototype.forceBatchCopy = function(entries, force, onret) {

fileHandleForce('copy', entries, force, onret);

}


function fileHandle(op, entries, onret) {
var body = '';
for (var i in entries) {
Expand All @@ -136,6 +178,18 @@ function fileHandle(op, entries, onret) {
rpc.postWithForm(uri, body, digest, onret);
}

function fileHandleForce(op, entries, force, onret) {
var body = '';
for (var i in entries) {
body += entries[i].toStr(op, force);
}

console.log(body);
var uri = conf.RS_HOST + '/batch';
var digest = util.generateAccessToken(uri, body);
rpc.postWithForm(uri, body, digest, onret);
}

function getEncodedEntryUri(bucket, key) {
return util.urlsafeBase64Encode(bucket + (key ? ':' + key : ''));
}
Expand Down
75 changes: 66 additions & 9 deletions test/rs.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ var logo = Math.random() + 'logo.png';
var logo1 = Math.random() + 'logo1.png';
var logo2 = Math.random() + 'logo2.png';
var logo3 = Math.random() + 'logo3.png';
var logo4 = Math.random() + 'logo4.png';
var logo5 = Math.random() + 'logo5.png';
var logo6 = Math.random() + 'logo6.png';
var logo7 = Math.random() + 'logo7.png';



describe('test start step2:', function() {

describe('rs.test.js', function() {
Expand All @@ -29,13 +36,16 @@ describe('test start step2:', function() {
TEST_BUCKET
);
var uptoken = putPolicy.token();
qiniu.io.putFile(uptoken, logo2, imageFile, null, function(err, ret) {

qiniu.io.putFile(uptoken, logo, imageFile, null, function(err, ret) {
should.not.exist(err);
});
qiniu.io.putFile(uptoken, logo, imageFile, null, function(err, ret) {

qiniu.io.putFile(uptoken, logo2, imageFile, null, function(err, ret) {
should.not.exist(err);
done();
});

});

describe('rs.Client#stat()', function() {
Expand All @@ -49,26 +59,45 @@ describe('test start step2:', function() {
});

describe('rs.Client#copy()', function() {
it('copy logo.png to logo1.png', function(done) {
client.copy(TEST_BUCKET, logo, TEST_BUCKET, logo1, function(err, ret) {
it('copy logo.png to logo5.png', function(done) {
client.copy(TEST_BUCKET, logo, TEST_BUCKET, logo5, function(err, ret) {
should.not.exist(err);
done();
});
});
});

describe('rs.Client#forceCopy()', function() {
it('copy logo.png to logo3.png', function(done) {
client.forceCopy(TEST_BUCKET, logo, TEST_BUCKET, logo1, 1, function(err, ret) {
should.not.exist(err);
done();
});
});
});


describe('rs.Client#remove()', function() {
it('remove logo.png', function(done) {
client.remove(TEST_BUCKET, logo, function(err, ret) {
it('remove logo5.png', function(done) {
client.remove(TEST_BUCKET, logo5, function(err, ret) {
should.not.exist(err);
done();
});
});
});

describe('rs.Client#move()', function() {
it('move logo1.png to logo.png', function(done) {
client.move(TEST_BUCKET, logo1, TEST_BUCKET, logo, function(err, ret) {
it('move logo.png to logo5.png', function(done) {
client.move(TEST_BUCKET, logo, TEST_BUCKET, logo5, function(err, ret) {
should.not.exist(err);
done();
});
});
});

describe('rs.Client#forceMove()', function() {
it('move logo5.png to logo.png', function(done) {
client.forceMove(TEST_BUCKET, logo5, TEST_BUCKET, logo, 1, function(err, ret) {
should.not.exist(err);
done();
});
Expand Down Expand Up @@ -128,12 +157,26 @@ describe('test start step2:', function() {
});

describe('rs.Client#batchCopy', function() {
var entries = [];
entries.push(new EntryPathPair(new EntryPath(TEST_BUCKET, logo), new EntryPath(TEST_BUCKET, logo6)));
entries.push(new EntryPathPair(new EntryPath(TEST_BUCKET, logo2), new EntryPath(TEST_BUCKET, logo7)));

it('copy from logo, logo2 to logo6, logo7', function(done) {
client.batchCopy(entries, function(err, ret) {
should.not.exist(err);
ret.should.eql([ { code: 200 }, { code: 200 } ]);
done();
});
});
});

describe('rs.Client#forceBatchCopy', function() {
var entries = [];
entries.push(new EntryPathPair(new EntryPath(TEST_BUCKET, logo), new EntryPath(TEST_BUCKET, logo1)));
entries.push(new EntryPathPair(new EntryPath(TEST_BUCKET, logo2), new EntryPath(TEST_BUCKET, logo3)));

it('copy from logo, logo2 to logo1, logo3', function(done) {
client.batchCopy(entries, function(err, ret) {
client.forceBatchCopy(entries, 1, function(err, ret) {
should.not.exist(err);
ret.should.eql([ { code: 200 }, { code: 200 } ]);
done();
Expand Down Expand Up @@ -164,6 +207,20 @@ describe('test start step2:', function() {
});
});
});

describe('rs.Client#forceBatchMove', function() {
var entries = [];
entries.push(new EntryPathPair(new EntryPath(TEST_BUCKET, logo), new EntryPath(TEST_BUCKET, logo1)));
entries.push(new EntryPathPair(new EntryPath(TEST_BUCKET, logo2), new EntryPath(TEST_BUCKET, logo3)));

it('move from logo.png, logo2.png to logo1.png, logo3.png', function(done) {
client.forceBatchMove(entries, 1, function(err, ret) {
should.not.exist(err);
done();
});
});
});

});

describe('rs.isQiniuCallBack', function() {
Expand Down