gpt4 book ai didi

javascript - 将图像上传到 S3 存储桶将其存储为应用程序/八位字节流,但我想将其存储为图像以使用它(JavaScript/节点)

转载 作者:行者123 更新时间:2023-12-05 06:04:06 26 4
gpt4 key购买 nike

我希望我的用户上传个人资料照片。现在我可以选择一个文件并将其传递到 POST 请求正文中。我正在使用 Node.js + JavaScript。

我正在使用 DigitalOcean 的 Spaces 对象存储服务来存储我的图像,它与 S3 兼容。

理想情况下,我的存储器将文件存储为实际图像。相反,它存储为一个内容类型为 application/octet-stream 的奇怪文件。我不知道我应该如何处理这个——通常为了显示图像,我只是引用托管图像的 URL,但在这种情况下,URL 指向这个奇怪的文件。它的名称类似于 VMEDFS3Q65JV4B7YQKLS(无扩展名)。该文件的大小为 14kb,这似乎是正确的,并且似乎包含文件数据。它看起来像这样:

enter image description here

等...

我知道我正在抓取正确的图像,我知道数据库已正确连接,因为它发布到完全正确的位置,我只是对文件类型不满意。

前端请求:

fetch('/api/image/profileUpload', { 
method: 'PUT',
body: { file: event.target.files[0] },
'Content-Type': 'image/jpg',
})

后端代码:

      const AWS = require('aws-sdk')

let file = req.body;
file = JSON.stringify(file);

AWS.config.update({
region: 'nyc3',
accessKeyId: process.env.SPACES_KEY,
secretAccessKey: process.env.SPACES_SECRET,
});

const s3 = new AWS.S3({
endpoint: new AWS.Endpoint('nyc3.digitaloceanspaces.com')
});

const uploadParams = {
Bucket: process.env.SPACES_BUCKET,
Key: process.env.SPACES_KEY,
Body: file,
ACL: "public-read",
ResponseContentType: 'image/jpg'
};

s3.upload(uploadParams, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});

我尝试过的:

  • 在请求中添加content-type header,在后面添加content-type参数
  • 在后端获取数据的其他方法——它们的结果都是一样的
  • 在从 req.body 抓取文件后不对文件进行字符串化
  • 将 POST 请求更改为 PUT 请求

如果您对 a) 将此八位字节流文件转换为图像或 b) 将此图像作为图像上传,我们将不胜感激。谢谢

最佳答案

我稍微解决了这个问题——我将参数更改为:

const uploadParams = {
Bucket: 'oscarexpert',
Key: 'asdff',
Body: image,
ContentType: "image/jpeg",
ACL: "public-read",
};

^^添加了 ContentType。

它仍然不存储实际图像,但这是一个不同的问题。

关于javascript - 将图像上传到 S3 存储桶将其存储为应用程序/八位字节流,但我想将其存储为图像以使用它(JavaScript/节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66453161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com