Emm*_*mma 10 configuration image-uploading amazon-s3 amazon-web-services node.js
使用此功能,我正在拍摄上传到我的服务器的图像,将它们发送到aws S3存储桶,然后从我的机器中删除它们.这一切都很有效.
如何配置图像,以便亚马逊将其作为公共服务并使用适当的内容类型(image/jpeg或image/png)?现在它默认为private和(application/octet-stream).
这是我可以在节点中配置的东西吗?或者我需要在我的aws控制台中这样做吗?
function sendFileToAmazon(file) {
var s3bucket = new AWS.S3({
params: {Bucket: 'BUCKET NAME'}
});
var params = {Key: file.name, Body: ''};
fs.readFile(file.path, function(err, data) {
if (err) throw err;
params.Body = data;
s3bucket.putObject(params, function(errBucket, dataBucket) {
if (errBucket) {
console.log("Error uploading data: ", errBucket);
} else {
console.log(dataBucket);
deleteFileFromTmp(file);
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
Emm*_*mma 29
这是回答我问题的最佳来源,虽然我最初没有找到答案:http: //docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
我在这里找到了答案:http: //blog.katworksgames.com/2014/01/26/nodejs-deploying-files-to-aws-s3/
你可以简单地添加:
ContentType: file.mimetype, ACL: 'public-read'到params,转向:
var params = {Key: file.name, Body: ''};
Run Code Online (Sandbox Code Playgroud)
成
var params = {Key: file.name, Body: '', ContentType: file.mimetype, ACL: 'public-read'};
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以只允许特定的mimetypes,例如:'image/jpg','image/jpeg','image/png','image/gif'等,而不是提供文件的mimetype.
小智 6
我已添加如下 ContentType 来解决此问题。对于 png 或 jpg,即使没有 ContentType,它也可以工作。但如果要上传 svg,您必须将 ContentType 属性发送到 S3 Bucket。
router.post(uploadImagePath, function (request, response) {
var form = new formidable.IncomingForm();
form.parse(request, (err, fields, files) => {
try {
let ImageName = files.file.name;
fs.readFile(files.file.path, function (err, data) {
let params = {
Bucket: 'Bucket-name',
Key: Date.now() + "_" + ImageName,
Body: data,
ACL: 'public-read',
ContentType: files.file.type
};
s3.upload(params, function (err, data) {
response.send(200, { key: data.key })
});
});
}
catch (e) {
response.send(500);
}
})
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12468 次 |
| 最近记录: |