从移动端上传XML时如何处理网络切换和中断-XML/RSS教程

移动端XML上传易因网络切换失败,因TCP连接重置导致请求中断且无断点续传;需用Blob分片、uploadId、本地存储及服务端校验实现可恢复上传。

移动端上传XML时为什么容易因网络切换失败

因为移动设备在Wi-Fi和蜂窝网络间切换时,TCP连接大概率会重置,XMLHttpRequest 或 fetch 会直接抛出 NetworkError 或进入 aborted 状态,而原生上传不带断点续传能力,整个 XML 文件得从头重发。

用 Blob 分片 + 唯一请求ID实现可恢复上传

核心是把大 XML 拆成固定大小的 Blob 片段(比如 512KB),每片单独上传,并附带当前分片序号、总片数、文件哈希和客户端生成的 uploadId。服务端按 uploadId 聚合所有成功接收的分片,最后拼接并校验完整 XML。

  • 前端需监听 navigator.onLine 变化,在离线时暂停上传队列,切回在线后自动重试未完成分片
  • 每个分片请求必须设 timeout(建议 15–30s),避免卡死在弱网中
  • 使用 AbortController 控制单个分片请求生命周期,网络切换时主动 abort() 并标记该片待重试
  • XML 内容若含敏感字段,应在分片前用 TextEncoder 转为 Uint8Array,再加密(如 AES-GCM)——服务端解密后才拼接,避免中间态明文泄露
const uploadChunk = async (blob, index, total, uploadId, signal) => {
  const formData = new FormData();
  formData.append('chunk', blob);
  formData.append('index', index);
  formData.append('total', total);
  formData.append('uploadId', uploadId);
  
  const res = await fetch('/api/upload-xml-chunk', {
    method: 'POST',
    body: formData,
    signal
  });
  
  if (!res.ok) throw new Error(`Chunk ${index} failed: ${res.status}`);
  return res.json();
};

服务端必须校验分片完整性与顺序

仅靠前端传的 index 不可靠——可能乱序到达或重复提交。服务端要:对每个 uploadId 维护一个 Redis Hash,键为 upload:${uploadId}:chunks,字段是 index,值为该分片 SHA-256;收到新分片时先比对哈希,一致才写入;合并前检查是否收齐 0..total-1 且无缺失。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 从移动端上传XML时如何处理网络切换和中断-XML/RSS教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001419+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001419+
  • 本周更新: 0+
  • 最后更新: 2026-03-16