uni-app 安卓下载文件获取不到文件大小

uni-app 安卓下载文件获取不到文件大小

项目信息 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10
HBuilderX类型 正式
HBuilderX版本号 3.4.9
手机系统 Android
手机系统版本号 Android 12
手机厂商 vivo
手机机型 iQOO Neo5
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

.

预期结果:

.

实际结果:

.

bug描述:

```javascript
plus.downloader.enumerate(function(tasks) {
if (tasks.length === 0) clearInterval($that.clearUnfinishedDownload);
$that.unfinishedDownload = tasks.map(item => {
console.log(item)
return item;
});
}, -1);

更多关于uni-app 安卓下载文件获取不到文件大小的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

上传可以复现的demo,方便排查

更多关于uni-app 安卓下载文件获取不到文件大小的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,安卓平台下载文件时获取不到文件大小的问题,可能是由于以下原因导致的:

  1. 请求头未正确设置:在发起下载请求时,服务器可能没有返回 Content-Length 头部信息,或者客户端没有正确处理该信息。

  2. 跨域问题:如果下载的文件来自跨域资源,服务器可能没有正确配置 CORS(跨域资源共享)策略,导致无法获取文件大小。

  3. 下载方式问题:如果使用的是 uni.downloadFile 方法,该方法在安卓平台上可能无法直接获取文件大小。

解决方案

1. 使用 uni.request 获取文件大小

在下载文件之前,可以先通过 uni.request 方法发起一个 HEAD 请求,获取文件的 Content-Length 头部信息,从而得到文件大小。

uni.request({
  url: 'https://example.com/path/to/file',
  method: 'HEAD',
  success: (res) => {
    const fileSize = res.header['Content-Length'];
    console.log('File Size:', fileSize);
    // 继续下载文件
    uni.downloadFile({
      url: 'https://example.com/path/to/file',
      success: (downloadRes) => {
        if (downloadRes.statusCode === 200) {
          console.log('File downloaded:', downloadRes.tempFilePath);
        }
      },
      fail: (error) => {
        console.error('Download failed:', error);
      }
    });
  },
  fail: (error) => {
    console.error('Failed to get file size:', error);
  }
});

2. 使用 uni.downloadFile 并监听进度

uni.downloadFile 方法提供了 progress 回调,可以实时获取下载进度。虽然无法直接获取文件大小,但可以通过进度信息间接判断下载情况。

uni.downloadFile({
  url: 'https://example.com/path/to/file',
  success: (res) => {
    if (res.statusCode === 200) {
      console.log('File downloaded:', res.tempFilePath);
    }
  },
  fail: (error) => {
    console.error('Download failed:', error);
  },
  progress: (res) => {
    console.log('Download progress:', res.progress);
    console.log('Total bytes received:', res.totalBytesWritten);
  }
});

3. 检查服务器配置

确保服务器正确设置了 Content-Length 头部信息,并且允许跨域请求。如果需要跨域,确保服务器配置了正确的 CORS 策略。

Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length
回到顶部