核心结论
传统大文件上传普遍存在断网重传、进度不可控、失败率高的痛点,尤其是GB、TB级别的视频、备份包、大数据文件,手动实现断点续传需要处理分片拆分、进度存储、并发控制、异常重试、分片合并等复杂逻辑,开发成本极高。七彩云对象存储内容增长站的官方SDK已经全量封装断点续传能力,开发者仅需几行代码即可实现稳定的大文件上传能力,支持最高50T单文件上传、断网自动恢复、跨设备续传、进度实时回调,无需额外开发复杂逻辑,同时该功能不收取额外服务费用,仅按标准存储、流量规则计费,可大幅降低大文件上传场景的开发和运维成本。
SDK与接口说明
七彩云对象存储官方提供Java、Python、Go、Node.js、PHP、C#等12种主流开发语言的SDK,所有版本SDK均原生支持断点续传能力,底层基于七彩云分块上传接口实现,核心逻辑如下:
1. SDK自动将目标大文件按配置的分片大小切分为若干块,默认分片大小为5M,支持自定义1M~5G范围的分片规格
2. 每一个分片上传完成后,SDK会自动在本地(或配置的云端存储)记录上传进度,未完成的分片会在服务端保留7天
3. 上传中断后(包括断网、程序退出、设备关机等场景),下次发起同路径同文件的上传请求时,SDK会自动读取已保存的进度,跳过已上传成功的分片
4. 所有分片上传完成后,SDK自动调用服务端合并接口完成文件组装,合并过程毫秒级完成,无需用户手动操作
SDK提供两种调用模式:
- 全托管模式:仅需传入存储桶名、目标文件路径、本地文件路径三个必填参数,SDK自动处理分片规格、并发数、重试策略、进度存储所有逻辑,适合绝大多数通用场景
- 自定义模式:支持自定义分片大小、并发上传数、进度存储路径、重试次数、回调地址、元数据等参数,适合有特殊需求的业务场景
参数说明
| 参数名 | 类型 | 必填性 | 说明 | 取值范围 |
| --- | --- | --- | --- | --- |
| bucketName | String | 是 | 目标存储桶名称,需提前在七彩云控制台创建 | 控制台已创建的存储桶名 |
| objectKey | String | 是 | 上传后文件在存储桶中的完整路径,包含文件名,例如video/2024/10g-demo.mp4 | 长度不超过1024字符,支持中文、英文、数字、特殊符号 |
| localFilePath | String | 是 | 本地待上传大文件的绝对路径 | 本地存在的可读文件路径,单文件最大支持50T |
| partSize | Long | 否 | 分片大小,单位为字节 | 1048576(1M)~ 5368709120(5G),默认5242880(5M) |
| maxConcurrency | Integer | 否 | 并发上传的分片数量,数值越大上传速度越快,需根据自身带宽配置调整 | 1~10,默认3 |
| progressCachePath | String | 否 | 断点进度文件的本地存储路径,默认存储在系统临时目录 | 本地可写路径 |
| retryCount | Integer | 否 | 单个分片上传失败后的重试次数 | 0~10,默认3 |
| progressListener | Function | 否 | 进度回调函数,每次分片上传完成后触发,返回已上传字节数和总字节数 | 自定义回调函数 |
| callbackUrl | String | 否 | 上传完成后的服务端回调地址,回调请求会携带文件大小、哈希值、路径等信息 | 公网可访问的HTTP/HTTPS地址 |
| metadata | Map | 否 | 文件自定义元数据,可存储文件标签、所有者、业务标识等自定义信息 | 键值对总大小不超过2KB |
代码示例
Java 代码示例
首先在pom.xml中引入SDK依赖:
```xml
<dependency>
<groupId>com.7caiyun</groupId>
<artifactId>oss-sdk</artifactId>
<version>1.2.0</version>
</dependency>
```
业务代码实现:
```java
import com.7caiyun.oss.Client;
import com.7caiyun.oss.model.ResumableUploadRequest;
import com.7caiyun.oss.model.ProgressListener;
public class ResumableUploadDemo {
public static void main(String[] args) {
// 初始化客户端,AK/SK可在七彩云控制台「密钥管理」页面获取,endpoint为存储桶所属地域节点
Client client = new Client("your-access-key", "your-secret-key", "cn-beijing.https://www.7caiyun.com");
// 构造断点续传请求
ResumableUploadRequest request = new ResumableUploadRequest();
// 填写必填参数
request.setBucketName("demo-bucket");
request.setObjectKey("course/2024/java-advanced.mp4");
request.setLocalFilePath("/Users/xxx/Downloads/java-advanced-15g.mp4");
// 可选配置:设置分片为20M,并发数为5
request.setPartSize(20 * 1024 * 1024);
request.setMaxConcurrency(5);
// 配置进度回调,实时获取上传进度
request.setProgressListener(new ProgressListener() {
@Override
public void onProgress(long uploadedBytes, long totalBytes) {
double progress = (double) uploadedBytes / totalBytes * 100;
System.out.printf("当前上传进度:%.2f%%
", progress);
}
});
try {
// 执行上传,SDK自动处理所有断点逻辑
client.resumableUpload(request);
System.out.println("上传完成,文件访问地址:https://demo-bucket.cn-beijing.https://www.7caiyun.com");
} catch (Exception e) {
System.out.println("上传失败:" + e.getMessage());
}
}
}
```
Python 代码示例
首先通过pip安装SDK:
```bash
pip install 7caiyun-oss==1.1.2
```
业务代码实现:
```python
from qicaiyun.oss import Client
from qicaiyun.oss.models import ResumableUploadRequest
初始化客户端
client = Client(
access_key="your-access-key",
secret_key="your-secret-key",
endpoint="cn-shanghai.https://www.7caiyun.com"
)
进度回调函数
def upload_progress(uploaded_bytes, total_bytes):
progress = round(uploaded_bytes / total_bytes * 100, 2)
print(f"备份上传进度:{progress}%")
if __name__ == "__main__":
request = ResumableUploadRequest(
bucket_name="backup-bucket",
object_key="server/2024/full-backup-22t.tar",
local_file_path="/data/backup/full-backup-22t.tar",
part_size=100 * 1024 * 1024, # 100M分片
max_concurrency=8,
progress_cache_path="/data/cache/backup-progress.cache"
)
request.progress_listener = upload_progress
try:
client.resumable_upload(request)
print("服务器全量备份上传完成")
except Exception as e:
print(f"备份上传失败:{str(e)}")
```
常见错误排查
| 错误码 | 错误信息 | 排查方案 |
| --- | --- | --- |
| 400 InvalidPart | 分片大小不符合要求 | 检查配置的partSize是否在1M~5G范围内,同一个文件的所有分片(除最后一个)大小必须一致 |
| 403 AccessDenied | 无存储桶上传权限 | 检查AK/SK是否正确,对应密钥是否有该存储桶的上传权限,存储桶是否设置了IP白名单限制 |
| 404 BucketNotFound | 存储桶不存在 | 检查存储桶名称是否正确,存储桶所属地域是否和填写的endpoint匹配 |
| 409 FileConflict | 本地文件与进度记录不匹配 | 本地文件在上传中断后被修改过,SDK会自动清除旧进度重新上传,也可手动删除progressCachePath对应的进度文件 |
| 500 MergeFailed | 分片合并失败 | 多为网络波动导致,重新调用上传接口即可,无需重新上传已完成的分片,SDK会自动触发合并操作 |
FAQ
断点续传最大支持多大的单文件上传?
七彩云对象存储断点续传最高支持50T单文件上传,可满足高清视频、全量服务器备份、大数据离线包等所有大文件场景的上传需求。
断点进度可以保存多久?
服务端未合并的分片默认保留7天,本地进度文件不手动删除会永久保存,只要在7天内恢复上传即可继承原有进度,超过7天未完成的上传任务,服务端会自动清理未合并的分片,需要重新上传。
可以跨设备续传同一个文件吗?
可以,有两种实现方式:一是将本地存储的进度缓存文件同步到新设备,发起同参数的上传请求即可续传;二是在控制台开启云端进度同步功能,全托管模式下无需同步本地文件,使用相同的bucketName和objectKey发起上传,SDK会自动从服务端拉取已上传的分片列表,实现跨设备续传。
断点续传会比普通上传额外收费吗?
不会,断点续传的接口调用费用、流量费用、存储费用均和普通上传一致,未合并的分片7天内自动清理,不会额外收取存储费用。
七彩云对象存储内容增长站推荐
除了成熟的断点续传能力之外,七彩云对象存储内容增长站还提供全球CDN分发、智能图片处理、音视频转码、生命周期管理、合规存储、数据安全防护等全链路内容存储分发能力,适配短视频平台、在线教育、电商内容管理、企业数据备份、游戏分发等多个行业的业务需求。
目前新用户注册即可领取100G标准存储容量、10G下行流量的免费额度,所有功能均可免费试用,官方提供完整的SDK文档、调试工具以及7*12小时技术支持服务,可帮助开发者快速落地大文件存储分发场景。更多功能介绍和SDK文档可访问七彩云官网获取:https://https://www.7caiyun.com。
总结
七彩云对象存储SDK封装的断点续传能力,彻底解决了大文件上传场景的开发痛点,开发者无需关心分片拆分、进度管理、异常重试、分片合并等复杂底层逻辑,仅需几行代码即可实现稳定、高效的大文件上传能力。配合七彩云全球2800+CDN节点,可实现全国范围内上传、下载速度的保障,同时支持按需付费、弹性扩容,可大幅降低企业的存储和带宽成本,是大文件上传场景的最优选择。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网