尝试上传到Amazon S3时出现"Unsupported body payload object"的错误。
尝试上传到Amazon S3时出现"Unsupported body payload object"的错误。
我想从前端将文件上传到我的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
发送它,但出现了类似的错误。
当尝试上传到Amazon S3时出现"Unsupported body payload object"错误的原因可能是文件内容需要转换为二进制。可以使用以下代码将文件内容转换为二进制:
var base64data = new Buffer(data, 'binary');
然后将参数设置如下:
var params = { Bucket: myBucket, Key: data.patientfile.file.fieldname, Body: base64data };
如果我理解错误,buffer已经是二进制的,你可以尝试以下代码:
var params = { Bucket: myBucket, Key: data.patientfile.file.fieldname, Body: data.patientfile.file.buffer};
请注意,Buffer现已被弃用,建议使用Buffer.from(data, "binary")替代。
问题原因:在上传到Amazon S3时出现了"Unsupported body payload object"错误。这个错误的原因是在服务器端的代码中,使用了req.body.data1111来获取数据,而这个数据实际上是一个二进制字符串,导致了错误的发生。
解决方法:需要将二进制字符串转换成正确的格式,才能成功上传到Amazon S3。可以使用Buffer.from方法将二进制字符串转换成Buffer对象,然后作为Body参数传递给S3的upload方法。
以下是修复后的代码示例:
// 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;
希望这个解决方法能帮助到未来遇到相同问题的人。
问题出现的原因:在尝试上传到Amazon S3时出现了"Unsupported body payload object"错误。
解决方法:根据Glen k的回答,使用nodejs实现以下代码,可以解决该问题。
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}`); })
以上代码使用了AWS SDK库,首先创建了一个S3实例,并传入了访问密钥ID和访问密钥。然后,将文件的二进制数据通过Buffer.from方法转换为base64编码的数据。接下来,设置了上传到S3的参数,包括存储桶名称、文件键(即文件路径)以及转换后的base64数据作为Body。最后,调用s3.upload方法进行文件上传,通过回调函数处理上传结果。如果出现错误,将错误信息打印并抛出异常;否则,打印上传成功的信息和文件的访问链接。
通过以上方法,可以解决"Unsupported body payload object"错误,并成功上传文件到Amazon S3。