刚开始用OSS作为文件云存储里使用的是.NET-SDK,但是随着数据量增加,对服务器的性能造成的影响;一直在想如何减少服务器的中转压力,发现阿里出了Javascript sdk了,马上展开研究;因为都是大文件上传,根据业务实际场景,所以想做一个客户端,对传统的桌面开发,java,C#,wpf等等研究了一下,不太适合;最终决定使用HTML5开发e桌面t应用,选择了Eletron。从githut上下截,安装配环境;试了一下客户demo,不行东东;就安排一人安装OSS javascript sdk测试,并制作多文件分片断点续传demo,结果搞如了半天总是出错,代码如下:

var client = new OSS({
region: ' < Your region >',
accessKeyId: ' < Your AccessKeyId >',
accessKeySecret: ' < Your AccessKeySecret >',
bucket: 'Your bucket name'
});

var co = require('co');
var OSS = require('ali-oss');
var fs = require('fs');

co(function* () {
// use 'chunked encoding'
var stream = fs.createReadStream('local-file');
var result = yield client.putStream('object-key', stream);
console.log(result);
// don't use 'chunked encoding'
var stream = fs.createReadStream('local-file');
var size = fs.statSync('local-file').size;
var result = yield client.putStream(
'object-key', stream, {contentLength: size});
console.log(result);
}).catch(function (err) {
console.log(err);
});

co可以找到也可以进去,但是提示fs.createReadStream, can't find this fucntion,调试跟踪发现fs被实例成了一个空类,只是基类的一些方法,没有它自己的方法,奇怪啦!各种调试,查阅,找到fs官方说,这个module已经不能用和其它依赖项有命名冲突,然后又找单独的fs包可以测试,还是不行;我也无语了,就自己按官方代码一点点试,发现可以运行不出错呀,一检查他的代码,终于发现了问题所在,是因为后实例了OSS; 把上面代码换成下面就可行了
var co = require('co');
var OSS = require('ali-oss');
var fs = require('fs');

var client = new OSS({
region: ' < Your region >',
accessKeyId: ' < Your AccessKeyId >',
accessKeySecret: ' < Your AccessKeySecret >',
bucket: 'Your bucket name'
});

co(function* () {
// use 'chunked encoding'
var stream = fs.createReadStream('local-file');
var result = yield client.putStream('object-key', stream);
console.log(result);
// don't use 'chunked encoding'
var stream = fs.createReadStream('local-file');
var size = fs.statSync('local-file').size;
var result = yield client.putStream(
'object-key', stream, {contentLength: size});
console.log(result);
}).catch(function (err) {
console.log(err);
});



Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐