刚开始用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

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐