作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望我的用户上传个人资料照片。现在我可以选择一个文件并将其传递到 POST 请求正文中。我正在使用 Node.js + JavaScript。
我正在使用 DigitalOcean 的 Spaces 对象存储服务来存储我的图像,它与 S3 兼容。
理想情况下,我的存储器将文件存储为实际图像。相反,它存储为一个内容类型为 application/octet-stream 的奇怪文件。我不知道我应该如何处理这个——通常为了显示图像,我只是引用托管图像的 URL,但在这种情况下,URL 指向这个奇怪的文件。它的名称类似于 VMEDFS3Q65JV4B7YQKLS(无扩展名)。该文件的大小为 14kb,这似乎是正确的,并且似乎包含文件数据。它看起来像这样:
等...
我知道我正在抓取正确的图像,我知道数据库已正确连接,因为它发布到完全正确的位置,我只是对文件类型不满意。
前端请求:
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);
});
我尝试过的:
如果您对 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/
我是一名优秀的程序员,十分优秀!