Nir*_*ner 6 upload amazon-s3 node.js pre-signed-url
我正在尝试通过来自 NodeJS 服务器(而不是来自浏览器)的签名 url 将图像上传到 aws-s3。要上传的图像已由 NodeJS 生成。我从 aws 获取签名的 url 并成功将其上传到 s3。
但是我的形象被破坏了。出于某种原因,S3 正在向我的图像添加一些标题(比较附加的图像)。
我究竟做错了什么?
获取签名网址:
try {
var params = {
Bucket: bucketName,
Key: 'FILE_NAME.png',
Expires: 60
};
const url = await s3.getSignedUrlPromise('putObject', params);
return url;
} catch (err) {
throw err;
}
Run Code Online (Sandbox Code Playgroud)
上传到 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);
});
Run Code Online (Sandbox Code Playgroud)
比较实际图像和上传到 s3 的图像。S3 添加了一些标题:
Sam*_*roe 11
我知道这很旧,但我在同一个问题上挣扎了一段时间。使用预先定义的 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);
})
Run Code Online (Sandbox Code Playgroud)
2023年来到这里,使用formdata面临同样的问题,但是在postman中,然后将其交给前端部门。
并且不要忘记添加正确的标题。
归档时间: |
|
查看次数: |
1643 次 |
最近记录: |