节点 JS AWS S3 文件上传。如何获取公共 URL 响应
Posted
技术标签:
【中文标题】节点 JS AWS S3 文件上传。如何获取公共 URL 响应【英文标题】:Node JS AWS S3 file upload. How to get public URL response 【发布时间】:2015-08-26 02:59:53 【问题描述】:我正在使用 Node SDK 将文件上传到 Amazon S3。
文件上传工作正常,但我想获取文件的公共 url 以发送回客户端。
目前我得到的回复是:
Successfully uploaded data ETag: '"957cd1a335adf5b4000a5101ec1f52bf"'
这是我的代码。我正在使用 Node Express 服务器和 Multer 来处理上传。
app.use(multer( // https://github.com/expressjs/multer
dest: './public/uploads/',
limits : fileSize:100000 ,
rename: function (fieldname, filename)
var time = new Date().getTime();
return filename.replace(/\W+/g, '-').toLowerCase() + time;
,
onFileUploadData: function (file, data, req, res)
// file : fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer
var params =
Bucket: creds.awsBucket,
Key: file.name,
Body: data,
ACL: 'public-read'
;
var s3 = new aws.S3()
s3.putObject(params, function (perr, pres)
if (perr)
console.log("Error uploading data: ", perr);
else
console.log("Successfully uploaded data", pres);
);
));
app.post('/upload-image', function(req, res)
if(req.files.file === undefined)
res.send("error, no file chosen");
);
【问题讨论】:
你是如何让它工作的,我收到“初始化中间件类型错误时出错:app.use() 需要中间件函数”消息 【参考方案1】:使用 upload 代替 putObject。 它将返回 Location 键中的公共 url
【讨论】:
很奇怪。putObject(...).promise()
工作正常,但 upload(...).promise()
未定义。他们为什么这样做。
@Richard 确实 `putObject(...).promise()` 在位置键中返回公共 url,因为我自己找不到它。以下是 2016 年 7 月的一些信息: Promise 目前仅支持返回 Request 对象的操作。由于 s3.upload 是返回 ManagedUpload 实例而不是 Request 的自定义函数,因此该操作目前不支持 Promise reference以上是关于节点 JS AWS S3 文件上传。如何获取公共 URL 响应的主要内容,如果未能解决你的问题,请参考以下文章
如何使用节点、createPresignedPost 和 fetch 将图像文件直接从客户端上传到 AWS S3
从 s3 存储桶获取 2 个文件,并在使用 lambda 节点 js 将其上传到 s3 存储桶后制作 1 个 zip 文件