Amazon S3如何配置实现Node.js上传文件后自动公开可访问对象URL?
Node.js上传图片到Amazon S3并直接访问对象URL完整实现步骤
1. 前置准备
- 已激活AWS账号,获取到具备S3上传权限的Access Key ID和Secret Access Key
- 本地/服务器环境已安装Node.js和npm/yarn包管理工具
- 已提前创建好用于存储图片的S3存储桶(Bucket)
2. S3存储桶权限配置(核心步骤,决定上传后能否直接访问)
默认S3存储桶是私有权限,必须完成以下配置才能公开访问对象:
- 关闭存储桶公开访问限制:进入S3控制台对应Bucket的「权限」选项卡,找到「阻止公开访问(存储桶设置)」,编辑后关闭全部4个限制选项,保存更改
- 配置存储桶公开读策略:在同个权限选项卡找到「存储桶策略」,粘贴如下配置,将
<你的Bucket名称>替换为实际桶名后保存:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<你的Bucket名称>/*" } ] }
- (可选)若需要前端跨域访问图片,配置CORS规则:在权限选项卡找到「跨域资源共享(CORS)」,粘贴如下规则,可按需调整允许的源域名:
[ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "PUT", "POST"], "AllowedOrigins": ["*"], "ExposeHeaders": [] } ]
3. Node.js服务端代码实现
3.1 安装依赖包
执行命令安装所需工具:npm install aws-sdk express multer multer-s3
依赖说明:aws-sdk为AWS官方工具包,multer用于处理文件上传请求,multer-s3是multer对接S3的扩展组件
3.2 编写上传逻辑
const express = require('express'); const AWS = require('aws-sdk'); const multer = require('multer'); const multerS3 = require('multer-s3'); const app = express(); const port = 3000; // 配置AWS鉴权信息 AWS.config.update({ accessKeyId: '替换为你的Access Key ID', secretAccessKey: '替换为你的Secret Access Key', region: '替换为Bucket所在区域,例如ap-southeast-1、us-east-1' }); const s3 = new AWS.S3(); // 配置上传规则 const upload = multer({ storage: multerS3({ s3: s3, bucket: '替换为你的Bucket名称', acl: 'public-read', // 核心配置:上传的对象默认设置为公开可读 key: function (req, file, cb) { // 自定义S3上存储的文件名,用时间戳前缀避免重名覆盖 cb(null, Date.now().toString() + '-' + file.originalname); } }) }); // 单图片上传接口 app.post('/upload', upload.single('image'), (req, res) => { // 上传完成后直接返回可公开访问的S3对象URL res.json({ code: 200, message: '上传成功', imageUrl: req.file.location }); }); app.listen(port, () => { console.log(`服务已启动,监听端口${port}`); });
生产环境注意:不要硬编码AK/SK到代码中,建议通过环境变量、AWS IAM角色等更安全的方式加载鉴权信息
4. 功能验证
- 启动Node.js服务,用接口测试工具向
http://localhost:3000/upload发送form-data格式的POST请求,参数key填image,value选择本地图片文件 - 拿到接口返回的
imageUrl,直接粘贴到浏览器地址栏即可正常访问图片
内容的提问来源于stack exchange,提问作者Roxana
相关产品推荐
相关产品推荐

