![](/img/trans.png)
[英]Getting "Unsupported Body Payload Object" error when trying to upload file to s3
[英]"Unsupported body payload object" when trying to upload to Amazon S3
我想将文件从我的前端上传到我的 Amazon S3 (AWS)。
我正在使用 dropzone,所以我转换了我的文件并将其发送到我的后端。
在我的后端我的文件是这样的:
{ fieldname: 'file',
originalname: 'test.torrent',
encoding: '7bit',
mimetype: 'application/octet-stream',
buffer: { type: 'Buffer', data: [Array] },
size: 7449 },
当我尝试使用我的函数上传文件时:
var file = data.patientfile.file.buffer;
var params = { Bucket: myBucket, Key: data.patientfile.file.fieldname, Body: file };
s3.upload(params, function (err, data) {
if (err) {
console.log("******************",err)
} else {
console.log("Successfully uploaded data to myBucket/myKey");
}
});
我得到错误:
不受支持的正文有效负载对象
你知道如何发送我的文件吗?
我试图用putobject
发送它并得到类似的错误。
我认为您可能需要将文件内容(在这种情况下可能是 data.patientfile.file.buffer)转换为二进制
var base64data = new Buffer(data, 'binary');
所以参数会是这样的:
var params = { Bucket: myBucket, Key: data.patientfile.file.fieldname, Body: base64data };
或者,如果我弄错了并且缓冲区已经是二进制的,那么您可以尝试:
var params = { Bucket: myBucket, Key: data.patientfile.file.fieldname, Body: data.patientfile.file.buffer};
这是我正在运行的生产代码。
请注意该问题可能发生在data1111
。
但是,要获得完整的想法,请在下面添加工作代码的所有关键部分。
客户:
// html
<input
type="file"
onChange={this.onFileChange}
multiple
/>
// javascript
onFileChange = event => {
const files = event.target.files;
var file = files[0];
var reader = new FileReader();
reader.onloadend = function(e) {
// save this data1111 and send to server
let data1111 = e.target.result // reader.result // ----------------- data1111
};
reader.readAsBinaryString(file);
}
服务器:
// node.js/ javascript
const response = await s3
.upload({
Bucket: s3Bucket, // bucket
Key: s3Path, // folder/file
// receiving at the server - data1111 - via request body (or other)
Body: Buffer.from(req.body.data1111, "binary") // ----------------- data1111
})
.promise();
return response;
为了使上述代码工作,整整花了 2 天时间。
希望这对将来的人有所帮助。
用 nodejs 实现了 Glen k 的回答......对我有用
const AWS = require('aws-sdk');
const s3 = new AWS.S3({
accessKeyId: process.env.AWSAccessKeyID,
secretAccessKey: process.env.AWSSecretAccessKey,
});
let base64data = Buffer.from(file.productImg.data, 'binary')
const params = {
Bucket: BUCKET_NAME,
Key: KEY,
Body: base64data
}
s3.upload(params, function(err, data) {
if (err) {
console.log(err)
throw err;
}
console.log(data)
console.log(`File uploaded successfully. ${data.Location}`);
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.