尝试上传到Amazon S3时出现"Unsupported body payload object"的错误。

6 浏览
0 Comments

尝试上传到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发送它,但出现了类似的错误。

0
0 Comments

当尝试上传到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")替代。

0
0 Comments

问题原因:在上传到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;

希望这个解决方法能帮助到未来遇到相同问题的人。

0
0 Comments

问题出现的原因:在尝试上传到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。

0