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 回复
在 uni-app 中,安卓平台下载文件时获取不到文件大小的问题,可能是由于以下原因导致的:
-
请求头未正确设置:在发起下载请求时,服务器可能没有返回
Content-Length
头部信息,或者客户端没有正确处理该信息。 -
跨域问题:如果下载的文件来自跨域资源,服务器可能没有正确配置 CORS(跨域资源共享)策略,导致无法获取文件大小。
-
下载方式问题:如果使用的是
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