我正在使用的相关软件包是aws-sdk
,multer-s3
和multer
。
我具有这样的上传设置:
aws.config.update({
secretAccessKey: "accessKey",
accessKeyId: "keyId",
region: "eu-west-2"
});
var s3 = new aws.S3();
const upload = multer({
storage: multerS3({
s3,
acl: "public-read",
bucket: "my-buckets-name",
metadata: function(req, file, cb) {
console.log("passed1"); // prints
cb(null, {
fieldName: "file.fieldname"
});
},
key: function(req, file, cb) {
console.log("passed2"); // prints
cb(null, Date.now().toString());
}
})
});
我的路线是这样的,
router.post(
"/single",
[auth, upload.single("image")],
async (req, res) => {
console.log("hereiam"); // never reached
res.json({
msg: "Server received media. Processing..."
});
if (mediaType === "image") {
try { /*...*/ } catch { /*...*/ }
} else { /*...*/ }
passed1
和passed2
都输出到控制台,我确信访问密钥和密钥ID是正确的。尝试上传图片时,抛出403错误。
我正在使用本机反应,而我正在做
const aws = require("aws-sdk/dist/aws-sdk-react-native");
那完全没有给我任何反馈,该程序继续运行,好像单击“上传”后什么也没发生。
然后我将nodejs导入更改为
const aws = require("aws-sdk");
现在我被抛出403。不知道我在做什么错。
我的S3权限:
答案 0 :(得分:0)
您可以尝试使用此解决方案吗?
const AWS = require('aws-sdk');
const s3Client = new AWS.S3();
let params = {
Bucket: <the bucket>,
Key: <the key>,
Body: <The file>
};
s3Client.upload(params, function(err, data) {
if (err) console.log(err);
else
<do something>
});
这是我通常使用API的方式。请注意,AWS凭证是通过环境变量传递的,但是您仍然可以按原样传递它们。从逻辑上讲,只要您正确添加凭据,管理员访问权限应允许您将文件上传到S3。但是,我使用的是我刚刚发布的方法,而不是您使用的方法。