tus-js-client - 持续上传的JavaScript利器
在当今互联网时代,大文件上传已成为日常操作,但是网络不稳定导致的中断问题常常困扰着我们。为了解决这一问题,我们推荐使用tus-js-client,一个基于HTTP协议的纯JavaScript客户端库,支持断点续传功能。
项目介绍
tus-js-client
遵循tus resumable upload protocol,能够在浏览器、Node.js、React Native和Apache Cordova应用中无缝工作。通过该协议,文件上传可以被暂停并在任何时刻恢复,无需重新上传已经传输的数据,极大地提高了上传效率和用户体验。
协议版本: 1.0.0
技术分析
tus-js-client
的核心特性是其断点续传机制。当上传过程中出现网络故障或用户主动暂停时,它会保存已上传的数据位置信息。待条件恢复后,它能从上次中断的地方继续上传,而不是从头开始。此外,库还提供了错误处理回调、进度更新回调以及元数据设置等功能,方便开发者进行自定义扩展。
应用场景
- 文件共享平台:用户可以在网络状况不佳时暂停上传,稍后再继续。
- 视频/音频流服务:大型媒体文件的后台自动上传,避免因网络波动影响用户其他操作。
- 远程协作工具:实时同步大量文件,即使在网络不稳定的环境下也能保证数据完整性。
项目特点
- 兼容性强:支持多种运行环境,包括浏览器、Node.js、React Native和Apache Cordova。
- 易用性高:提供清晰的API接口,附带详尽的文档,使得集成简单快速。
- 断点续传:实现了真正意义上的断点续传,提高文件上传的成功率和用户体验。
- 鲁棒性好:内置重试策略,遇到网络问题可自动延迟重试,减少失败的可能性。
查看以下简单示例,体验如何使用tus-js-client
:
//监听输入元素的变化
input.addEventListener('change', function (e) {
//获取选定的文件
const file = e.target.files[0];
//创建新的tus上传
const upload = new tus.Upload(file, {
endpoint: 'http://localhost:1080/files/',
retryDelays: [0, 3000, 5000, 10000, 20000],
metadata: {
filename: file.name,
filetype: file.type,
},
//错误处理
onError: function (error) {
console.log('Failed because: ' + error);
},
//进度更新
onProgress: function (bytesUploaded, bytesTotal) {
const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
console.log(bytesUploaded, bytesTotal, `${percentage}%`);
},
//成功回调
onSuccess: function () {
console.log(`Download ${upload.file.name} from ${upload.url}`);
},
});
//检查是否有之前的上传记录
upload.findPreviousUploads().then(function (previousUploads) {
//如果有,就从上一次的上传状态恢复
if (previousUploads.length) {
upload.resumeFromPreviousUpload(previousUploads[0]);
}
//开始上传
upload.start();
});
});
请参阅tus-js-client的官方文档以获取更多关于安装、使用、API及贡献指南的信息。