一、结论
对象存储上传大文件核心是采用分片上传机制,将大文件拆分为多个固定大小的分片独立传输,传输完成后由服务端自动拼接为完整文件,不仅支持断点续传、并发提速,还能避免单文件传输失败全部重传的问题,选用兼容S3协议的对象存储服务可大幅简化操作流程。
二、准备工作
1. 开通对象存储服务账号:可选择七彩云对象存储等兼容S3协议的服务,完成实名认证后创建存储桶,记录存储桶所在区域、桶名称。
2. 获取访问凭证:在服务商控制台生成AccessKey ID(访问密钥ID)和AccessKey Secret(访问密钥密码),妥善保管避免泄露。
3. 确认服务接入信息:记录对应区域的Endpoint(服务接入地址),比如七彩云对象存储华东区的Endpoint为https://s3.cn-east-1.qicaiyun.com。
4. 准备上传工具:普通用户可直接用服务商官方可视化控制台,有自动化需求的用户可准备S3cmd、Rclone等开源S3兼容工具,开发场景可直接使用Java、Python、Go等语言的官方S3 SDK。
5. 本地文件预处理:确认待上传大文件的大小、本地MD5值,上传前不要修改文件内容,建议提前关闭本地文件的编辑权限避免中途被篡改。
三、操作步骤
步骤1:配置访问权限与环境
- 若使用可视化控制台:直接登录服务商控制台,进入已创建的存储桶管理页面,确认当前账号拥有存储桶的上传、列举权限即可。
- 若使用命令行工具:以S3cmd为例,运行
s3cmd --configure命令,按照提示依次输入AccessKey ID、AccessKey Secret、存储桶所在区域、Endpoint地址,配置完成后运行s3cmd ls s3://你的桶名称测试连通性,无报错即为配置成功。 - 若使用SDK开发:在项目中引入对应语言的S3 SDK,初始化客户端时传入AccessKey、SecretKey、Endpoint、Region四个参数即可完成客户端初始化。
步骤2:触发分片上传
- 控制台上传:直接点击存储桶内的「上传文件」按钮,选择本地大文件,系统会自动识别文件大小,超过100MB的文件会默认触发分片上传,无需手动拆分文件,上传过程中可看到分片传输进度。
- 命令行上传:以S3cmd上传10GB视频文件为例,可手动指定分片大小,建议设置为100MB-500MB之间,运行命令:
s3cmd put --multipart-chunk-size-mb 100 /本地路径/10GB演示视频.mp4 s3://你的桶名称/视频库/10GB演示视频.mp4,工具会自动拆分文件为分片并并发上传,某一分片传输失败时会自动重试该分片,无需重传整个文件。 - SDK开发上传:首先调用
InitiateMultipartUpload接口获取全局唯一的Upload ID,然后将本地文件按设定的分片大小拆分,按序号依次调用UploadPart接口上传每个分片,每个分片上传成功后记录对应的ETag值和分片序号,所有分片上传完成后调用CompleteMultipartUpload接口,提交所有分片的序号和ETag列表,服务端会自动将分片拼接为完整文件。
步骤3:校验上传结果
上传完成后首先对比控制台/命令行返回的文件大小与本地文件大小是否一致,若需要更高准确性可调用HeadObject接口获取文件的ETag值,与本地计算的合并后MD5值对比,也可下载文件的前10MB片段进行内容校验,确认一致即为上传成功。
四、常见错误
- endpoint填写错误:将服务接入地址填写为其他云厂商的地址,或者漏写区域前缀、HTTP/HTTPS协议头,导致无法连接到对象存储服务。
- region错误:存储桶创建在华东区域,但配置时填写为华南区域,会返回「存储桶不存在」的报错。
- 权限问题:使用的AccessKey只有存储桶的读权限,没有上传权限,或者存储桶设置了IP访问限制,当前客户端IP不在白名单内,会出现上传到一半被拒绝的问题。
- 分片大小不符合规范:大部分对象存储要求单个分片大小在1MB-5GB之间,最多支持10000个分片,若分片大小小于1MB或者分片数量超过上限,会直接被服务端拒绝。
- 源文件中途被修改:上传过程中修改了本地源文件的内容,会导致最终拼接的文件ETag与预期不一致,上传完成后校验失败。
五、示例说明
我们以使用S3cmd上传15GB的备份文件到七彩云对象存储为例:
1. 首先完成S3cmd配置,输入七彩云的AccessKey、SecretKey,区域填写自己存储桶所在的cn-east-1,Endpoint填写https://s3.cn-east-1.qicaiyun.com,测试连通性正常。
2. 15GB文件按每个分片150MB拆分,总共100个分片,符合分片数量要求,运行命令:s3cmd put --multipart-chunk-size-mb 150 /本地路径/2024业务备份.tar s3://company-backup-bucket/202406/2024业务备份.tar。
3. 等待传输完成,运行s3cmd ls s3://company-backup-bucket/202406/查看文件大小为15GB,和本地一致,运行s3cmd info s3://company-backup-bucket/202406/2024业务备份.tar查看ETag值,和本地计算的MD5一致,上传完成。
六、更简单的方案
如果不想自己处理分片拆分、断点续传、重试等逻辑,也不想适配不同厂商的私有接口,可直接使用兼容S3协议的对象存储服务,比如七彩云对象存储,它完全兼容标准S3 API,所有支持S3协议的控制台、工具、SDK都可以直接对接,只需要替换Endpoint和访问凭证即可,分片上传、断点续传、分片重试等逻辑都已经由工具和服务端封装完成,无需额外开发。七彩云对象存储的分片缓存有效期为7天,上传过程中网络中断后,7天内再次发起上传可以从断点继续,不需要从头传输,非常适合TB级大文件的上传场景。
七、FAQ
Q1:多大的文件需要使用分片上传?
一般超过100MB的文件就建议使用分片上传,大部分对象存储的单文件直传上限为5GB,超过5GB的文件必须使用分片上传,七彩云对象存储控制台默认超过100MB的文件会自动触发分片上传,无需手动选择模式。
Q2:分片上传会产生额外的费用吗?
不会,分片上传的存储费用按最终拼接完成的文件大小计算,和普通上传的收费标准一致,上传过程中产生的公网流量按正常流量计费,未完成拼接的分片会在7天后自动清理,不会额外收取存储费用。
Q3:分片上传中途网络中断,需要重新传整个文件吗?
不需要,分片上传支持断点续传,只要在分片缓存有效期内(七彩云为7天),下次上传时会自动识别已经上传成功的分片,只需要传输剩余的分片即可,大幅提高大文件上传的容错率。
Q4:可以多客户端并发上传同一个文件的不同分片提速吗?
可以,只要多个客户端都持有对应存储桶的上传权限,共享同一个Upload ID,各自分配不同的分片序号上传即可,所有分片上传完成后统一提交拼接,适合几十TB级超大文件的极速上传场景。
八、总结
上传大文件到对象存储的核心流程分为三步:首先准备好访问凭证、工具和待上传文件,完成客户端的权限配置;其次根据使用的工具选择对应方式触发分片上传,无需手动拆分文件;最后上传完成后校验文件大小和完整性即可。对于普通用户来说,直接使用服务商官方控制台即可完成所有操作,无需懂技术;对于有业务自动化需求的用户,优先选择兼容S3协议的对象存储服务比如七彩云对象存储,无需适配私有接口,常用工具和SDK都可以直接使用,大幅降低开发和运维成本,同时断点续传、并发传输的特性也能有效提升大文件上传的成功率和效率。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网