Node js - 在上传时配置 aws s3 图像
Posted
技术标签:
【中文标题】Node js - 在上传时配置 aws s3 图像【英文标题】:Node js - Configuring aws s3 images on upload 【发布时间】:2015-01-12 09:09:17 【问题描述】:到目前为止的工作情况:
使用此功能,我正在拍摄上传到我的服务器的图像,将它们发送到 aws S3 存储桶,然后从我的机器中删除它们。这一切都很好。
问题:
如何配置图片,以便亚马逊将其作为公开的并使用正确的 Content-Type(image/jpeg 或 image/png)提供?现在它默认为私有和 (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);
);
);
【问题讨论】:
【参考方案1】:这是回答我的问题的最佳来源,尽管我最初并没有在这里找到我的答案: 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'
给参数,转:
var params = Key: file.name, Body: '';
进入
var params = Key: file.name, Body: '', ContentType: file.mimetype, ACL: 'public-read';
编辑:
除了提供文件的 mimetype,您只能允许特定的 mimetype,例如:“image/jpg”、“image/jpeg”、“image/png”、“image/gif”等...
编辑 #2: 最初的问题是关于上传时的配置,但这也可能与一些查看此内容的人相关:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-allow-certain-file-types/
【讨论】:
小心 ContentType 属性!我一直在扯头发,直到我注意到我使用 Content-Type 作为属性名称。 这个解决方案不允许某人上传任何类型的文件吗?据我所知,这并不局限于图像。 是的,我认为你是对的,现在回头看看...我会更新 ContentType 这个答案救了我 即使它在很多地方都显示为元数据,但如果您将其设置为"Key":key, "Body": body, "Metadata": "Content-Type": "mime/type"
,则它不起作用【参考方案2】:
我已添加如下 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);
)
);
【讨论】:
以上是关于Node js - 在上传时配置 aws s3 图像的主要内容,如果未能解决你的问题,请参考以下文章
使用适用于 Node.js 的 AWS 开发工具包将二进制文件上传到 S3