You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cordova Android大文件下载受限,如何突破50MB限制?

在Cordova Android应用中突破50MB文件下载限制的解决方案

问题描述

我正尝试在Cordova Android应用内下载一个ZIP文件,但当文件大小超过50MB时下载失败,请问如何提升这个50MB的限制?我的代码如下:

var var_url = 'https://example.com/teste.zip'; // 待下载文件的地址
var fileURL =  "///storage/emulated/0/Android/data/myapp/teste.zip"; // 保存路径

var req = new XMLHttpRequest();
req.open("GET", var_url, true);
req.responseType = "blob";
req.onload = function (event) {
    var blob = req.response;
    alert(blob.size);
    alert(blob.type);
    alert("WORKS!");
    alert(fileURL);
    alert(var_url);
    if (blob.size>52747758) { alert('This file is over 50 megabytes') } //52747758约等于50.30MB    
  // cordova.file.etc是文件保存位置,这里是Android主存储的应用文件夹内
  window.resolveLocalFileSystemURL(cordova.file.externalApplicationStorageDirectory, function (directoryEntry) {
    // 'temp.pdf'是你想要的文件名,这里改为teste.zip
    directoryEntry.getFile('teste.zip', { create: true }, function (fileEntry) {
      fileEntry.createWriter(function (fileWriter) {
        fileWriter.onwriteend = function (e) {
            // 下载成功
            alert('Write of file completed.');
        };

        fileWriter.onerror = function (e) {
          // 写入失败
          alert('Write failed');
        };

        fileWriter.write(blob);
      } );
    } );
  });
};

req.send(); 

解决方案

你当前的代码用XMLHttpRequest+Blob处理大文件时,会把整个文件加载到内存中,当文件超过50MB时容易触发内存溢出(OOM),导致下载失败。推荐使用Cordova官方的FileTransfer插件,它采用流式下载(边下载边写入本地文件),不会占用大量内存,也没有默认的50MB限制。

步骤1:安装FileTransfer插件

执行以下命令安装插件:

cordova plugin add cordova-plugin-file-transfer

步骤2:替换为FileTransfer下载代码

把原来的XMLHttpRequest代码替换为以下代码:

var var_url = 'https://example.com/teste.zip';
var savePath = cordova.file.externalApplicationStorageDirectory + 'teste.zip';

var fileTransfer = new FileTransfer();

fileTransfer.download(
    var_url,
    savePath,
    function(fileEntry) {
        alert('下载完成,文件路径:' + fileEntry.toURL());
    },
    function(error) {
        alert('下载失败:' + error.code + ',错误信息:' + error.source + ' -> ' + error.target);
    },
    false, // 是否信任所有SSL证书,生产环境建议设为false
    {} // 可选的请求头,比如Authorization等
);

额外注意事项

  • 针对Android 10及以下版本,确保AndroidManifest.xml中已添加存储权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    Android 11及以上采用分区存储,无需额外申请该权限,直接使用cordova.file.externalApplicationStorageDirectory即可。
  • 检查设备存储是否有足够剩余空间,避免因空间不足导致下载失败。

内容的提问来源于stack exchange,提问作者Dani Carla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:42:01