什么是super_fast_file_trans?

super_fast_file_trans(SFFT) 是hadss团队最新开发的一款针对大文件传输场景的三方库,使用该三方库,可以以极低的代码量轻松实现多线程并发下载、分片上传、断点续下/传、自动重试等多种大文件传输过程中的典型功能特性。super_fast_file_trans同时支持http和https

你可以点击下面的链接直接使用和获取super_fast_file_trans:
OpenHarmonyhttps://ohpm.openharmony.cn/#/cn/detail/@hadss%2Fsuper_fast_file_trans
Giteehttps://gitee.com/ohadss/super_fast_file_trans

super_fast_file_trans特别为大文件的高速并发传输场景开发,实现了以下多种 功能特性

多线程分块下载

SFFT提供可轻松接入的使用多线程并发下载目标文件的能力,在弱网情况下显著提高传输效率(下载速率)

多线程下载:
多线程并发下载

当启动下载时,若开发者没有设置并发线程数(concurrency),SFFT会对目标文件进行预下载(试连),并根据试连响应头中的结果(Content-Range),根据文件大小自动计算启动的线程数,启用多个线程并行下载目标文件。线程数量的计算规则如下:

文件大小范围 并发线程数
x<10MB 1
10MB≤x<100MB 2
100MB≤x 4

效果呈现

断点续下

SFFT提供下载时完整的断点续下能力,可由开发者自行决定是否启用。当启动下载时,SFFT会实时存储下载进度到本地数据库中,以实现在网络中断、客户端崩溃等场景下能够从文件下载中断的位置继续下载。对用户而言,能够发挥 节省时间、减少流量消耗、下载高效 的良好体验。

效果呈现

异步分片上传

SFFT提供分片上传本地文件的能力,内存占用极小可有效解决因为文件过大而导致的应用崩溃问题,同时加速文件上传。当启用分片上传时,若没有设置每个上传请求携带的分片大小(chunkSize),SFFT会根据本地文件大小计算合适的分片,以最大窗口并发发送若干请求传输分片大小的数据,分片大小的计算规则如下:

文件大小范围 分片大小
x<1G 1MB
1GB≤x x/1000

效果呈现

断点续传

SFFT提供上传时断点续传能力,可由开发者自行决定是否启用。当启动上传时,SFFT会实时存储上传进度到本地数据库中,以实现在网络中断、客户端崩溃等场景下能够从文件上传中断的位置继续上传

效果呈现

自动重试机制

SFFT提供下载或上传失败时自动重试的能力,可由开发者自行决定重试次数和重试时间间隔。当下载或上传失败时,SFFT会自动尝试重新连接服务器,从断点处继续传输数据。

回调机制

SFFT提供下载或上传过程中多个阶段的回调接口,可以方便开发者轻松实现下载或上传任意阶段的功能逻辑。

SFFT是一款功能强大的文件传输三方库,更多关于SFFT三方库提供功能特性,接口详情见SFFT的Openharmony代码仓🌏🌏。

关于 super_fast_file_trans的其他说明:

下载文件

SFFT依赖服务端支持实现分块下载,服务端需满足以下要求:

  1. 服务端必须支持Range请求头,允许请求指定字节范围的数据块。这样请求可以只下载文件的部分内容,而不是整个文件。
  2. 服务端响应时,必须支持Content-Range响应头,并返回指定的字节范围,这告诉请求返回的时哪个字节范围的数据块,并指明了文件的总大小。同时,建议响应头携带Content-Length、Content-Type、Accept-Ranges字段:
Content-Range: bytes 0-999/5000  # 指明返回文件的字节范围,文件总大小为5000字节
Content-Length: 1000 # 响应返回的字节长度
Content-Type: application/octet-stream # 响应体为二进制流
Accept-Ranges: bytes # 指明服务端支持断点续下
  1. 当接收到携带Range头的请求时,服务端建议支持并返回 206 Partial Content 状态码:
HTTP/1.1 206 Partial Content
  1. 如果服务端希望支持Etag或Last-modified响应头字段来支持文件一致性校验,建议支持EtagLast-modified字段,在提供上述字段的情况下试连会在断点续下和继续下载时对响应头中的
    EtagLast-modified进行一致性判断,若与之前不一致将无法通过校验,导致请求失败:
Etag:"d41d8cd98f00b204e980099800998ecf8427e"
Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
上传文件

SFFT依赖服务端支持实现分片上传,服务端需满足以下要求:

  1. 服务端必须支持multipart/form-data,能够支持文件按和其他表单数据在HTTP协议中一起上传。
  2. 服务端必须支持接受并保存分片数据。服务端能够接收并解析上传请求中的表单数据,并能够将表单中数据保存到指定位置。使用分片上传的文件的默认表单项为:
totalChunks:xxx
chunkIndex:xxx
file:xxx
  1. 服务端支持合并分片数据/文件。

  2. 服务端支持自定义哈希值字段读取并能够在文件合并后校验哈希值以保证一致性。当前传输头内部哈希值字段默认命名为X-File-Hash-xxx,其中xxx为算法名,例如X-File-Hash-sha256。如果配置了hashHeader则使用用户自定义的命名。

// 默认命名
X-File-Hash-sha256:"C9CC55C19BB1B85B8B3E88BE3B6F824BEFF5C62671F03B6729B59136B9380CC1"
// 用户自定义命名
custom-Hash:"C9CC55C19BB1B85B8B3E88BE3B6F824BEFF5C62671F03B6729B59136B9380CC1"

会话安全配置

双向校验依赖客户端证书,使用安全配置相关接口前需要在客户端本地安装或使用系统证书。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐