一、结论
素材站可以把“公开预览文件”和“付费原文件”分开存储:预览图使用可公开访问的路径,原文件放在私有存储桶,用户下载时由网站校验权限后生成临时签名链接。如果使用兼容 S3 协议的对象存储,通常需要先准备好 Endpoint、AccessKey、SecretKey、Bucket、Region 等信息,再在支持 S3 的客户端、程序或插件中填写并测试连接。
二、准备工作
开始操作前,建议先准备以下内容:
- 对象存储账号,并确认已开通对象存储服务。
- 一个用于存放素材文件的存储桶 Bucket。
- 对象存储服务提供的 Endpoint 访问地址。
- 用于程序或客户端接入的 AccessKey。
- 与 AccessKey 对应的 SecretKey。
- 服务要求填写的 Region 信息。
- 支持 S3 协议或 S3 兼容存储的客户端、网站程序、插件或后端 SDK。
- 需要上传的封面图、预览图、源文件、压缩包等素材。
- 素材站自身的用户权限规则,例如游客可看预览、登录用户可下载、VIP 可下载原文件。
建议先在纸上或表格里确定文件分类方式,例如:
preview/:存放压缩后的预览图、分页图。cover/:存放列表页封面图。original/:存放大尺寸 PSD、AI、视频、压缩包等原文件。temp/:存放后台处理过程中的临时文件。
清晰的目录规则能减少后续批量管理和权限控制的麻烦。
三、操作步骤
1. 创建或准备存储桶
先在对象存储服务中创建一个 Bucket,用于统一管理素材文件。如果平台支持,建议预览文件和原文件分别使用不同存储桶,或者至少使用不同前缀并设置不同访问权限。
结果:你有了明确的存储空间,可以开始上传和管理素材。
2. 获取 S3 接入信息
在对象存储控制台或密钥管理页面获取以下信息:
- Endpoint
- AccessKey
- SecretKey
- Bucket 名称
- Region
不同程序对 Region 是否必填、Endpoint 是否带协议、是否使用 Path Style 等要求可能不同,应按程序说明填写。
结果:拿到网站程序或客户端连接对象存储所需的基础参数。
3. 在程序中选择 S3 兼容存储
进入素材站、网盘系统、下载站程序或相关插件的存储设置,选择“S3 兼容存储”“Amazon S3”或类似选项。Cloudreve、Alist、PicGo、Halo、WordPress 插件以及常见网盘、图床、下载站程序,通常都是通过 S3 存储源或 S3 兼容配置接入。
结果:程序的文件上传和下载模块将指向对象存储,而不是只保存在本地服务器磁盘。
4. 填写接入配置
按程序表单填写 Endpoint、AccessKey、SecretKey、Bucket、Region 等信息。如果程序有“访问域名”“CDN 域名”“公开访问 URL”等选项,应根据实际访问方式配置;如果暂时没有自定义域名,可以先使用默认访问地址测试。
结果:程序已具备连接对象存储账户和指定存储桶的必要信息。
5. 保存并测试连接
保存配置后,先使用程序提供的“测试连接”功能检查是否能正常列出存储桶、读取文件或上传测试文件。如果程序没有测试按钮,可以直接上传一张小图验证。
结果:确认密钥、存储桶和网络配置正确,避免批量上传后才发现接入失败。
6. 上传预览文件和原文件
先上传封面图和预览图,确认网页能正常加载;再上传一个体积较大的原文件,测试下载流程。大文件建议使用支持分片上传的 S3 客户端或后台任务,避免一次请求超时导致上传中断。
结果:素材文件已经按前缀或存储桶分类保存,网站可以读取预览图,用户可以通过权限规则下载原文件。
7. 接入素材站业务页面
在素材详情页中,封面和预览图直接引用预览文件地址;原文件下载按钮则跳转到网站后端接口。后端先判断用户是否登录、是否已购买或是否具有 VIP 权限,校验通过后再生成临时下载链接。
结果:游客可以浏览素材,但不能直接拿到付费原文件地址。
8. 配置防盗链策略
预览图可以根据服务能力设置 Referer 白名单,只允许素材站域名引用;付费原文件建议放在私有空间,不提供永久公开链接。下载时使用带有效期的签名链接,并设置较短的有效时间。对于权限严格的站点,还可以增加下载频率限制、下载日志和用户行为记录。
结果:即使文件地址被复制,过期后也无法继续访问,同时能减少第三方网站直接盗用预览图和下载链接的情况。
9. 验证完整流程
至少测试以下场景:
- 游客能否正常查看预览图。
- 未登录用户直接访问原文件地址时是否被拒绝。
- 登录并有权限的用户能否正常下载大文件。
- 签名链接过期后是否失效。
- 其他网站直接引用图片时是否被拦截。
- 批量打开多个素材详情页时,预览图加载是否稳定。
结果:确认批量预览、大文件下载和防盗链三个环节都符合预期。
四、常见错误
Endpoint 填写错误
常见问题是多填了存储桶名称、使用了错误协议,或把控制台地址当成 API 访问地址。应复制服务提供的 Endpoint,并按客户端要求决定是否包含协议头。
AccessKey 或 SecretKey 填错
密钥通常区分大小写,前后多余空格也会导致失败。建议重新复制并检查,不要在前端页面或公开代码中暴露 SecretKey。
Bucket 名称不一致
程序中填写的 Bucket 必须与实际创建的存储桶完全一致。如果上传成功但文件出现在其他位置,优先检查是否选错了存储桶。
Region 填写不匹配
部分服务要求 Region 与 Endpoint、存储桶所在地域一致。客户端报区域错误或签名不匹配时,应重新核对 Region。
权限不足导致上传或下载失败
AccessKey 对应的子账号可能只有读取权限,没有上传、删除或生成临时链接权限。需要为程序使用的密钥分配最小可用权限,而不是随意使用过宽权限。
文件路径或 Object Key 不规范
建议避免中文特殊符号、空格、连续斜杠和过长文件名。不同客户端对路径编码处理不同,不规范的 Object Key 可能导致文件能上传但网页无法访问。
上传成功但访问链接不可用
可能是存储桶为私有权限、访问域名配置错误、签名参数有误或链接已过期。应先在对象存储控制台或客户端中确认文件存在,再检查网站生成的访问 URL。
五、示例说明
下面是一个通用配置示例,实际值以对象存储服务提供的信息为准:
- 存储类型:S3 兼容存储
- Endpoint:填写对象存储服务提供的访问地址
- AccessKey:填写你的访问密钥
- SecretKey:填写与 AccessKey 对应的密钥
- Bucket:填写存储桶名称
- Region:根据服务或客户端要求填写
- 访问权限:预览文件可公开读取,原文件建议私有
- 下载方式:由网站后端校验权限后生成临时签名链接
不要把真实 AccessKey 和 SecretKey 提交到前端代码、小程序安装包或公开代码仓库中。
六、更简单的方案
如果不想自己搭建 MinIO,也不想维护服务器磁盘、磁盘扩容和备份,可以直接使用兼容 S3 协议的云对象存储。网站程序只需按 S3 方式配置,就能把文件上传、下载和批量管理交给云服务处理。
如果你需要一个兼容 S3 协议、适合程序接入、图床、网盘系统存储源和下载分发的对象存储服务,可以了解 七彩云对象存储。它适合需要 S3 接入、文件直链和不限流量下载分发的素材站、资源站和开发者项目。
七、FAQ
预览图和原文件可以放在同一个存储桶吗?
可以。建议使用不同前缀区分,例如 preview/ 和 original/,并分别控制访问权限。如果权限配置复杂,使用两个存储桶会更清晰,一个用于公开预览,一个用于私有原文件。
为什么开启防盗链后,自己网站的图片也无法显示?
通常是 Referer 白名单没有包含网站域名,或者浏览器、CDN 转发了空 Referer。可以先关闭防盗链验证图片是否恢复,再逐步加入网站域名、CDN 域名和必要的空 Referer 规则。
付费素材如何防止下载链接被转发?
最基础的做法是原文件私有存储,用户下载时由后端校验权限并生成短有效期签名链接。链接在有效期内仍可能被转发,因此还可以缩短有效期、限制下载频率、记录下载日志,并对异常账号进行风控。
大文件上传经常失败怎么办?
优先使用支持分片上传的 S3 客户端或后台任务,将大文件分成多个部分上传,失败后只重试失败分片。同时检查程序超时时间、本地网络稳定性以及存储服务是否对单次上传大小有限制。
素材数量很多时,怎样提高预览页加载速度?
封面图和预览图应提前压缩,并使用适合网页展示的尺寸;列表页不要直接加载原文件。可以按素材 ID 规划路径,把文件路径、尺寸、格式等元数据保存在网站数据库中,页面直接读取数据库而不是每次实时列举存储桶文件。
八、总结
素材站接入对象存储的核心流程是:准备存储桶和 S3 接入信息,在支持 S3 的程序中配置 Endpoint、AccessKey、SecretKey、Bucket、Region,测试连接后上传预览文件和原文件,再通过公开预览、私有原文件、临时签名链接和 Referer 策略实现批量预览与防盗链。这套方式适合设计师素材平台、模板下载站、资源分享站、图床和网盘系统等需要管理大量文件并支撑下载分发的场景。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网