关于OSS上传返回result返回Object [Generator] {}
node下运行如下代码
const OSS = require('ali-oss')
var path = require("path")
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// 填写Bucket名称。
bucket: 'examplebucket',
});
async function put () {
try {
// 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
let result = await client.put('exampleobject.txt', path.normalize('/localpath/examplefile.txt'));
console.log(result);
} catch (e) {
console.log(e);
}
}
put();
result返回 Object [Generator] {} 。 await并没有起到作用导致代码client并没有先执行所以获取不到OOS的地址。但是这个代码在Egg框架可以正常执行。原生node却有问题。。。。。。就离谱
原生NodeJS OSS上传文件的解决方案
主要使用ES6中的 yield 解决异步回调
const OSS = require('ali-oss')
var path = require("path")
const co = require("co");
async put(){
let client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// 填写Bucket名称。
bucket: 'examplebucket',
});
co(function* () {
let resultCo = yield client.put('exampleobject.txt', path.normalize('/localpath/examplefile.txt'));
console.log(resultCo);
}).catch(function (err) {
console.log(err);
});
}