javascript - 使用 Promisify 从回调转换为 Async-Await 格式后,AWS S3 上传不起作用
问题描述
我正在使用aws-sdk的上传方法将文件从浏览器中的 React 应用程序上传到 S3 存储桶。
原基于回调的上传方式如下:
var params = {Bucket: 'bucket', Key: 'key', Body: stream};
s3.upload(params, function(err, data) {
console.log(err, data);
});
我用Promisify包装了它,让它像 Async-await 一样工作,如下所示:
const AWS = require('aws-sdk');
const { promisify } = require('es6-promisify');
... <in my React component> ...
async uploadFile() {
try {
var params = {
Bucket: <BucketName>,
Key: <KeyName>,
Body: <File Stream>
};
const res = await uploadToS3Async(params);
console.log(res);
} catch (error) {
console.log(error);
}
}
现在,当我uploadFile
在某个触发的事件上调用函数时,它会产生以下错误:
TypeError: service.getSignatureVersion is not a function
at ManagedUpload.bindServiceObject
at ManagedUpload.configure
at new ManagedUpload
at upload
at new Promise (<anonymous>)
解决方案
你不需要使用es6-promisify
你可以做:
try {
const params = {Bucket: 'bucket', Key: 'key', Body: stream};
const data = await s3.upload(params).promise();
console.log(data);
}
catch (err) {
console.log(err);
}
https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-promises.html
推荐阅读
- github-actions - Github 操作在不同的工作流运行之间共享数据
- java - Java - “未处理的异常”虽然它实际上已处理
- c# - 无效的会话 ID Selenium WebDriver C#
- annotations - 使用 Python 和 PILLOW 向现有 TIFF 图像添加 WANG 注释
- arrays - 无法索引到空数组。(数组不为空)
- python - 接受 0 个位置参数,但给出了 1 个
- go - 为什么我不能使用函数中的指针更新变量的值?
- ios - 卸载应用程序后不会删除 UserDefaults
- python - 如何检查word文档中是否提供了问题的详细信息?
- android-management-api - 设备中的 MDM 配置文件删除