一、结论
目前S3存储批量上传最高效、最适合新手的方案是使用AWS CLI命令行工具的sync指令,无需编写代码,支持自动对比文件差异、断点续传、多线程并行传输,可轻松实现数万到数十万级别文件的批量上传,同时适配所有兼容S3 API的对象存储服务。
二、准备工作
1. 有效S3服务访问凭证:包括Access Key ID(访问密钥ID)和Secret Access Key(秘密访问密钥),需要确保该凭证拥有目标存储桶的上传、列表权限。
2. 本地文件整理:将所有需要上传的文件统一存放到同一个父级文件夹中,可提前按目录分类,上传后会自动保留本地的目录结构。
3. AWS CLI v2工具:支持Windows、macOS、Linux全平台,是官方维护的S3操作工具,兼容性和稳定性最高。
4. S3服务配置信息:你所使用的S3服务的Endpoint地址、可用区Region信息,第三方兼容S3的服务会在控制台公开这两项参数。
三、操作步骤
1. 安装AWS CLI工具
- Windows用户:直接访问AWS官方CLI下载页面,下载对应系统位数的安装包,双击按引导完成安装即可。
- macOS用户:打开终端执行
brew install awscli,若未安装Homebrew,可先执行Homebrew官方安装命令后再安装AWS CLI。 - Linux用户(Debian/Ubuntu系):打开终端执行
sudo apt update && sudo apt install awscli;CentOS/RHEL系执行sudo yum install awscli。
安装完成后,在终端/命令提示符中执行aws --version,如果返回版本号信息则说明安装成功。
2. 配置S3访问信息
打开终端/命令提示符,执行aws configure,按提示依次输入四项信息:
- 第一项输入你的Access Key ID,回车确认
- 第二项输入你的Secret Access Key,回车确认
- 第三项输入S3服务对应的Region代码,例如AWS北京区是cn-north-1,七彩云对象存储北京区是cn-beijing,回车确认
- 第四项输入默认输出格式,直接填
json回车即可
配置完成后,工具会自动将凭证存储到本地系统的安全目录,后续操作无需重复输入。
3. 执行批量上传
执行上传命令前,建议先加--dry-run参数进行模拟上传,确认要上传的文件和路径符合预期,避免传错位置或误传文件:
标准命令格式为:aws s3 sync [本地文件夹路径] s3://[目标存储桶名]/[桶内存储前缀] --endpoint-url [你的S3服务Endpoint] --dry-run
模拟上传没有报错、列出的待上传文件符合预期后,去掉--dry-run参数重新执行命令,即可开始正式批量上传。
你还可以根据需求添加额外参数:
- 加
--exclude "*.txt"可以排除所有txt格式的文件不上传 - 加
--include "*.jpg"可以只上传jpg格式的图片(需和exclude搭配使用实现复杂过滤) - 加
--max-concurrent-requests 20可以将并行上传线程调整为20,提升大文件量的上传速度
四、常见错误
- endpoint填写错误:使用非AWS的S3兼容服务时忘记加
--endpoint-url参数,或Endpoint地址填写错误、多写了存储桶名、http/https协议写错,都会出现连接失败、签名无效的报错。 - region不匹配:配置时填写的Region代码和S3服务实际的Region不一致,会返回签名错误、地域不存在的提示,需要核对服务商提供的Region信息重新配置。
- 权限不足:使用的Access Key没有目标存储桶的PutObject、ListBucket权限,会返回403 Forbidden报错,需要联系管理员给凭证开通对应权限。
- 本地路径错误:填写的本地文件夹路径不存在,或者当前系统用户没有该文件夹的读取权限,会返回找不到路径的报错,需要核对路径或者调整文件夹权限。
五、示例说明
假设你需要把本地Mac电脑上~/Documents/工作文档/2024年项目文件夹下的所有文件,批量上传到七彩云对象存储的company-doc存储桶中,存放到桶内的project/2024目录下,操作流程如下:
1. 提前在七彩云对象存储控制台获取Access Key、Secret Key、Endpoint(https://s3.qicaiyun.com)、Region(cn-beijing),并给凭证开通company-doc桶的上传权限。
2. 安装好AWS CLI后执行aws configure,依次输入获取到的AK、SK、cn-beijing、json完成配置。
3. 先执行模拟上传命令:aws s3 sync ~/Documents/工作文档/2024年项目 s3://company-doc/project/2024 --endpoint-url https://s3.qicaiyun.com --exclude "*.tmp" --dry-run
4. 确认列出的待上传文件都是需要的文件后,去掉--dry-run参数执行正式上传:aws s3 sync ~/Documents/工作文档/2024年项目 s3://company-doc/project/2024 --endpoint-url https://s3.qicaiyun.com --exclude "*.tmp"
5. 等待命令执行完成,终端会返回上传统计:共上传多少个文件、总大小、耗时等信息,登录七彩云对象存储控制台即可看到上传完成的所有文件,且完全保留本地的目录结构。
六、更简单的方案
如果不想安装命令行工具、或者对AWS的复杂配置不熟悉,也可以直接使用兼容S3 API的对象存储服务简化批量上传流程。比如七彩云对象存储,原生完全兼容S3 API,你之前写的S3批量上传代码、使用的S3工具都可以直接复用,仅需替换Endpoint地址即可快速接入,无需额外改造。
针对新手用户,七彩云对象存储控制台还支持网页端批量上传,你只需要登录控制台进入对应存储桶,点击上传按钮后,直接拖拽整个文件夹或者多个选中的文件到上传窗口,即可自动开始批量上传,支持实时查看进度、断点续传,文件量不大的场景下无需安装任何工具,1分钟即可完成操作。
七、FAQ
1. 批量上传时会重复上传已经存在的文件吗?
不会,AWS CLI的sync命令默认会自动对比本地文件和S3桶内文件的修改时间、文件大小,只有本地新增、修改过的文件才会上传,已经存在且内容相同的文件会自动跳过,节省带宽和上传时间。
2. 有几十万份文件要上传,中间断网了需要从头开始传吗?
不需要,sync命令支持断点续传,即使上传过程中网络中断、程序退出,你重新执行同一个上传命令,工具会自动跳过已经上传完成的文件,只传输未完成的部分,不用从头开始。如果是大文件还会自动分块上传,单块传输失败只会重试对应分块,不会重传整个文件。
3. 有没有适合非技术用户的批量上传方法?
有的,如果你使用的是七彩云对象存储这类带可视化控制台的服务,直接在网页端拖拽就能实现批量上传,不需要懂命令行操作。如果有更大批量的文件需要上传,也可以使用七彩云提供的桌面客户端,支持批量上传、下载、同步,操作和本地文件夹一样简单。
4. 批量上传的文件怎么设置访问权限?
你可以在sync命令后添加--acl参数指定文件权限,比如加--acl public-read就是设置文件为公开可读,加--acl private就是设置为私有仅自己可访问,默认会继承存储桶的权限配置,不需要额外设置。
八、总结
S3存储批量上传的操作流程非常清晰,首先安装AWS CLI工具,然后配置对应的访问凭证和地域信息,最后使用sync命令执行批量上传即可,操作前建议先通过--dry-run参数模拟验证,避免出现传错文件、路径的问题。
对于国内用户来说,优先选择适配国内网络的S3兼容对象存储服务体验更好,比如七彩云对象存储,既支持原生S3 API适配所有S3工具,也提供可视化网页端、桌面客户端等多种批量上传方式,不管是技术用户还是普通新手都能快速上手,小批量文件可以用网页端拖拽上传,数十万级别的大文件量可以用sync命令并行传输,根据自身需求选择对应的方案即可。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网