gpt4 book ai didi

node.js - 通过签名 url 将图像上传到 AWS-S3 时图像损坏

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:55 34 4
gpt4 key购买 nike

我正在尝试通过 NodeJS 服务器(而不是浏览器)的签名 URL 将图像上传到 aws-s3。要上传的图像已由 NodeJS 生成。我从 aws 获取签名 URL 并成功将其上传到 s3。

但我的形象已损坏。由于某种原因,S3 向我的图像添加了一些 header (比较附加的图像)。

我做错了什么?

获取签名网址:

    try {
var params = {
Bucket: bucketName,
Key: 'FILE_NAME.png',
Expires: 60
};
const url = await s3.getSignedUrlPromise('putObject', params);
return url;
} catch (err) {
throw err;
}

上传到s3

        var stats = fs.statSync(filePath);
var fileSizeInBytes = stats["size"];
const imageBuffer = fs.readFileSync(filePath);

var formData = {
'file': {
value: imageBuffer,
options: {
filename: 'FILE_NAME.png'
}
}
};

request({
method: 'put',
url,
headers: {
'Content-Length': fileSizeInBytes,
'Content-MD': md5(imageBuffer)
},
formData
}, function (err, res, body) {
console.log('body',body);
});

比较实际图像和上传到 s3 的图像。 S3 添加了一些 header :

compare

最佳答案

我知道这已经很旧了,但我在同一问题上挣扎了一段时间。使用预签名 url 上传时,请勿使用 new FormData();

我注意到 s3 上的所有文件都比原始文件大 2kb。

<input type="file" id="upload"/>

var upload = document.getElementById('upload');
var file = upload.files[0];

//COMMENTED OUT BECAUSE IT WAS CAUSING THE ISSUE
//const formData = new FormData();
//formData.append("file", file);

// Assuming axios

const config = {
onUploadProgress: function(progressEvent) {
var percentCompleted = Math.round(
(progressEvent.loaded * 100) / progressEvent.total
);
console.log(percentCompleted);
},
header: {
'Content-Type': file.type
}
};

axios.put(S3SignedPutURL, file, config)
.then(async res => {
callback({res, key})
})
.catch(err => {
console.log(err);
})

关于node.js - 通过签名 url 将图像上传到 AWS-S3 时图像损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234437/

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