Skip to content

Commit c7ea865

Browse files
committed
update cos: add buffer upload
1 parent 757dce9 commit c7ea865

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

qcloud_cos/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/node_modules

qcloud_cos/lib/cos.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,63 @@ function upload(filePath, bucket, dstpath, bizattr, insertOnly, callback) {
147147
}
148148
}
149149

150+
function put(fileBuffer, bucket, dstpath, bizattr, insertOnly, callback) {
151+
if (typeof bizattr === 'function') {
152+
callback = bizattr;
153+
bizattr = null;
154+
}else if(typeof insertOnly === 'function'){
155+
callback = insertOnly;
156+
insertOnly = undefined;
157+
} else {
158+
callback = callback || function(ret){ console.log(ret); };
159+
}
160+
161+
if (typeof callback === 'function' && fileBuffer instanceof Buffer) {
162+
163+
bucket = bucket.strip();
164+
dstpath = fixPath(dstpath);
165+
var expired = parseInt(Date.now() / 1000) + conf.EXPIRED_SECONDS;
166+
var sign = auth.signMore(bucket, expired);
167+
var url = generateResUrl(bucket, dstpath);
168+
var urlInfo = urlM.parse(url);
169+
170+
var sha = crypto.createHash('sha1');
171+
sha.update(fileBuffer);
172+
173+
var form = formstream()
174+
.field('op', 'upload')
175+
.field('sha', sha.digest('hex'));
176+
177+
// TODO: formsteam.buffer 可以编辑 buffer
178+
form.buffer('filecontent', fileBuffer, dstpath);
179+
180+
if (bizattr) {
181+
form.field('biz_attr', bizattr.toString());
182+
}
183+
if(insertOnly!==undefined){
184+
form.field('insertOnly', insertOnly);
185+
}
186+
187+
var headers = form.headers();
188+
headers['Authorization'] = sign;
189+
headers['User-Agent'] = conf.USER_AGENT();
190+
var options = {
191+
protocol: urlInfo.protocol,
192+
hostname: urlInfo.hostname,
193+
port: urlInfo.port,
194+
path: urlInfo.path,
195+
method: 'POST',
196+
headers: headers
197+
};
198+
199+
var req = buildRequest(options, callback);
200+
req && form.pipe(req);
201+
} else {
202+
// error, file not exists
203+
callback({'code':COS_PARAMS_ERROR, 'message':'file '+filePath+' not exists or params error', 'data':{}});
204+
}
205+
}
206+
150207
/**
151208
* 分片上传获取size
152209
* @param {int} size 文件分片大小,Bytes
@@ -915,3 +972,4 @@ exports.list = list;
915972
exports.prefixSearch = prefixSearch;
916973
exports.createFolder = createFolder;
917974
exports.moveFile = moveFile;
975+
exports.put = put;

qcloud_cos/test/sample.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ qcloud_cos.conf.setAppInfo('1000000', 'AKIiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii', 'w
66
qcloud_cos.cos.deleteFile('bucket01', '123/t.mp4', function(ret) {console.log(ret);
77
qcloud_cos.cos.upload('./test', 'bucket01', '123/t.mp4', '0666', function(ret) {console.log(ret);
88
qcloud_cos.cos.updateFile('bucket01', '123/t.mp4', '', function(ret) {console.log(ret);
9+
qcloud_cos.cos.put(new Buffer('123'), '123/t.txt', '', function(ret) {console.log(ret);
910
qcloud_cos.cos.statFile('bucket01', '123/t.mp4', function(ret) {console.log(ret);
1011
qcloud_cos.cos.prefixSearch('bucket01', '123', 'z', function(ret) {console.log(ret);
1112
qcloud_cos.cos.createFolder('bucket01', '/123', function(ret) {console.log(ret);

0 commit comments

Comments
 (0)