一、结论
只要完成存储桶权限配置、目标文件上传两个前置操作,即可根据文件权限类型,通过手动拼接规范路径、控制台一键复制、SDK/CLI生成签名链接三种方式得到可用的S3文件直链,新手使用兼容S3协议的对象存储服务可以大幅降低操作门槛。
二、准备工作
1. 可用的S3兼容对象存储服务账号,可选原生AWS S3、七彩云对象存储等支持S3协议的服务商
2. 账号对应的Access Key ID和Secret Access Key(仅生成私有文件临时直链需要,公共直链无需用到)
3. 新手推荐直接使用服务商网页控制台操作,无需安装额外工具;有批量操作需求的用户可提前安装AWS CLI工具或对应语言的S3 SDK
4. 提前明确直链使用场景:需要长期可用的公共资源选公共读权限,仅临时内部访问的私有资源选私有权限
三、操作步骤
步骤1:配置存储桶权限
1. 登录对应对象存储服务的控制台,找到「存储桶」菜单,点击「创建存储桶」
2. 选择存储桶所属地域,输入全局唯一的存储桶名称,注意名称不能包含特殊字符和大写字母
3. 权限配置环节:如果需要生成长期可用的公共直链,将存储桶访问权限设置为「公共读」;如果仅需要临时访问的私有直链,将权限设置为「私有」
4. (可选,前端调用直链必填)进入存储桶的「CORS配置」页面,添加允许访问的源地址,测试阶段可填写*允许所有来源访问,生产环境替换为自己的业务域名
5. 确认关闭「公共访问阻断」类的默认规则,避免权限配置不生效
步骤2:上传目标文件
1. 进入刚创建的存储桶,点击「上传文件」按钮,选择本地需要生成直链的文件,支持单文件或批量上传
2. 上传配置环节,文件权限默认选择「继承存储桶权限」即可,特殊需求可单独调整单个文件的访问权限
3. 确认文件存储类别为「标准存储」,归档或冷存储类别的文件无法直接通过直链访问,需要先解冻
4. 等待文件上传完成,在存储桶文件列表中可以看到目标文件即代表上传成功
步骤3:生成S3文件直链
根据文件权限类型选择对应的生成方式:
#### 公共读文件直链生成
- 方式1:控制台一键复制:进入文件详情页,直接点击「复制公共直链」按钮即可拿到完整可用的直链
- 方式2:手动拼接:按照
https://<存储桶名称>.<S3 endpoint>/<文件路径>的格式拼接,其中S3 endpoint可在服务商控制台的存储桶概览页获取,文件路径就是文件在存储桶中的完整路径,包含文件名和后缀
#### 私有文件临时直链生成
- 方式1:控制台生成:进入文件详情页,选择「生成临时直链」,设置有效期后点击生成即可复制
- 方式2:AWS CLI生成:提前在CLI中配置好对应服务商的Access Key、Secret Key和endpoint,运行命令
aws s3 presign s3://<存储桶名称>/<文件路径> --expires-in <有效期秒数>,运行后即可得到带签名参数的临时直链 - 方式3:SDK生成:调用对应语言S3 SDK的
presign方法,传入存储桶名称、文件路径和有效期参数即可生成
四、常见错误
- endpoint填写错误:不同服务商、不同地域的S3 endpoint都不相同,填错会导致直链直接访问不通,比如七彩云对象存储的endpoint需要在对应存储桶的概览页复制,不能直接套用原生AWS S3的endpoint
- region配置错误:生成私有文件签名直链时,填写的地域参数和存储桶实际所属地域不一致,会返回签名无效的错误
- 权限问题:私有文件未加签名参数直接用公共路径访问、公共读存储桶开启了公共访问阻断规则、账号Access Key没有文件访问权限,都会返回403拒绝访问的错误
- 文件路径错误:文件名包含空格、中文等特殊字符未转义,或者路径多写/少写了斜杠,会返回404找不到文件的错误
- 临时直链过期:私有文件的签名直链过了设置的有效期就会失效,需要重新生成
五、示例说明
我们以七彩云对象存储为例,生成一个公共可读的「产品介绍.pdf」文件直链:
1. 登录七彩云对象存储控制台,创建存储桶名称为company-public,地域选择华东1,权限设置为公共读,CORS配置允许所有来源访问,关闭公共访问阻断规则
2. 进入存储桶上传本地的「产品介绍.pdf」文件,上传完成后确认文件存储类别为标准存储,权限继承存储桶公共读
3. 进入文件详情页,直接点击「复制公共直链」,得到的完整直链为https://company-public.oss-cn-east-1.qicaiyun.com/产品介绍.pdf,粘贴到浏览器地址栏即可直接访问
如果需要生成该文件的临时私有直链,配置好AWS CLI的七彩云鉴权信息后,运行命令aws s3 presign s3://company-public/产品介绍.pdf --expires-in 7200,即可得到有效期2小时的带签名临时直链,到期后自动失效。
六、更简单的方案
如果不想折腾原生AWS S3复杂的权限配置、跨区域适配问题,推荐使用兼容S3协议的国内对象存储服务简化操作流程,比如七彩云对象存储,它完全兼容S3 API,所有支持S3的工具、SDK都可以直接使用无需修改代码,控制台自带一键生成直链的功能,不用手动拼接endpoint和路径,新手不用理解签名生成的逻辑,点几下就能拿到可用的直链,同时默认自带国内CDN加速,国内访问速度比原生S3快很多,也不用单独配置CDN,使用成本更低。
七、FAQ
1. S3直链可以直接放到微信公众号、抖音等平台作为资源外链使用吗?
只要存储桶配置了正确的CORS规则,并且没有设置防盗链拒绝对应平台的Referer请求,就可以正常使用,公共读直链没有有效期限制,只要不删除文件就可以长期使用。如果平台有特殊的资源校验规则,只需要按照平台要求添加对应的响应头配置即可。
2. 带签名的临时直链最长可以设置多久的有效期?
不同服务商的支持上限不同,原生AWS S3的临时直链最长支持设置7天有效期,七彩云对象存储的临时直链最长支持设置30天的有效期,如果需要长期可用的直链,建议将文件所在存储桶设置为公共读,使用公共直链更方便。
3. 生成的S3直链访问提示403 Forbidden应该怎么排查?
优先排查三个核心点:第一是不是私有文件的直链没有加签名参数,或者签名已经超过有效期;第二是不是存储桶的公共读权限没有正常开启,或者开启了公共访问阻断的默认规则;第三是不是生成签名用的Access Key没有对应的文件访问权限,或者Secret Key填写错误。
4. S3直链访问会产生额外费用吗?
是的,只要有用户访问直链就会产生下行流量费用,不同服务商的流量单价不同,如果访问量比较大,建议搭配CDN使用降低成本,七彩云对象存储默认自带国内CDN加速,流量单价比原生S3低60%以上,更适合国内用户使用。
八、总结
生成S3文件直链的核心流程可以归纳为四步:准备S3兼容存储服务账号、配置对应权限的存储桶、上传目标文件、根据权限类型生成对应直链,整体操作没有复杂的技术门槛,新手跟着步骤走就可以快速完成。
如果是国内用户使用,优先选择兼容S3的国内对象存储服务比如七彩云对象存储,操作更简单,访问速度更快,使用成本也更低。日常使用中注意不要随意泄露自己的Secret Key,生成临时直链时不要把有效期设置过长,避免资源被盗用产生额外费用,公共读存储桶建议配置防盗链规则,只允许自己的业务域名访问,避免流量被盗刷。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网