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

使用cordova-file-transfer插件download方法返回错误码3,求排查原因

解决Cordova FileTransfer错误码3(CONNECTION_ERR)的问题

首先,错误码3对应的是FileTransferError.CONNECTION_ERR,也就是连接相关的错误,可能是代码逻辑问题,也可能是服务器配置的限制,咱们一步步排查:

先看代码里的几个潜在问题

  1. 函数名拼写错误:你写的downlaodMedia多了个a,应该是downloadMedia——虽然这不一定直接导致错误,但容易引发后续调试混乱,先修正过来。
  2. URL编码方式不对:你用encodeURI处理了整个URL,但其实只需要编码pathName部分就行(因为URL里的https://等协议部分不需要编码)。如果pathName里包含空格、&、%这类特殊字符,encodeURI的处理不够彻底,建议换成encodeURIComponent单独编码路径部分:
    var url= "https://www.monsite.com/medias/" + encodeURIComponent(pathName);
    
  3. 目标路径可能存在格式问题:cordova.file.DataDirectory已经是标准的文件系统URL(比如cdvfile://localhost/data/),如果pathName开头带斜杠,拼接后会变成cdvfile://localhost/data//xxx.mp3,这种重复斜杠可能导致路径解析失败。建议先清理pathName的多余斜杠:
    const cleanPathName = pathName.replace(/^\/+/, '');
    const file = cordova.file.DataDirectory + cleanPathName;
    
  4. 请求头可能缺失关键信息:有些服务器会拒绝没有User-Agent的请求,或者对非浏览器请求做拦截。可以在headers里添加一个模拟移动端的User-Agent:
    headers: {
      "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA==",
      "User-Agent": "CordovaApp/1.0.0 (Mobile)"
    }
    

再排查服务器端的配置问题

  1. 先验证文件是否能正常访问:在浏览器里直接打开https://www.monsite.com/medias/[你的pathName],看能不能正常下载。如果不行,那肯定是服务器的问题——比如文件权限设置错误、Nginx/Apache的路径配置不对,或者文件本身不存在。
  2. CORS跨域配置:如果你的App和网站域名不同,服务器需要配置CORS允许跨域请求。需要在响应头里添加:
    Access-Control-Allow-Origin: * (或者你的App对应的域名)
    Access-Control-Allow-Methods: GET
    
    否则浏览器(Cordova的WebView本质是浏览器)会阻止跨域下载请求。
  3. HTTPS证书问题:如果你的网站用的是自签名证书,或者证书不被移动系统信任,即使你把trustAllHosts设为true,Android 7+或iOS的安全机制还是会拒绝连接。这种情况要么换成正规CA签发的证书,要么在Android的network_security_config.xml里配置允许该域名的不安全连接。
  4. Basic认证是否有效:用Postman或者curl测试一下带Authorization头的请求是否能访问文件,确认账号密码的Base64编码是否正确。

修正后的代码参考

function downloadMedia(pathName) {
  // 清理pathName开头的多余斜杠
  const cleanPathName = pathName.replace(/^\/+/, '');
  const targetFile = cordova.file.DataDirectory + cleanPathName;
  // 正确编码路径部分
  const url = "https://www.monsite.com/medias/" + encodeURIComponent(cleanPathName);

  window.resolveLocalFileSystemURL(targetFile, existingFile, startDownload);

  function existingFile(fileEntry) {
    navigator.notification.alert('文件已存在', null, '提示');
  }

  function startDownload() {
    const fileTransfer = new FileTransfer();
    
    const options = {
      headers: {
        "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA==",
        "User-Agent": "CordovaApp/1.0.0 (Mobile)"
      }
    };

    fileTransfer.download(
      url,
      targetFile,
      function(entry) {
        navigator.notification.alert('下载成功', null, '下载完成');
      },
      function(error) {
        console.error('下载错误详情:', error);
        alert(`下载错误:\n源地址: ${error.source}\n目标地址: ${error.target}\n错误码: ${error.code}\n错误信息: ${error.message}`);
      },
      true, // 测试环境可以开启,生产环境建议关闭并配置合法证书
      options
    );
  }
}

排查步骤建议

  1. 先在浏览器测试文件URL的可访问性,排除服务器文件本身的问题;
  2. 用Postman验证带Authorization头的请求是否有效;
  3. 修正代码里的拼写、编码、路径问题,添加User-Agent;
  4. 检查服务器的CORS和HTTPS证书配置。

内容的提问来源于stack exchange,提问作者El Mamoun Lamsahle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:00:56