uni-app uni.uploadFile 返回值uploadTask. onProgressUpdate一直是undefined

uni-app uni.uploadFile 返回值uploadTask. onProgressUpdate一直是undefined

开发环境 版本号 项目创建方式
Mac sequoia 15.5 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:4.75

手机系统:iOS

手机系统版本号:iOS 14

手机厂商:苹果

手机机型:iphonexr

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

uni.chooseImage({
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
const uploadTask = uni.uploadFile({
url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
name: 'file',
formData: {
'user': 'test'
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
}
});  
uploadTask.onProgressUpdate((res) => {  
console.log('上传进度' + res.progress);  
console.log('已经上传的数据长度' + res.totalBytesSent);  
console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);  

// 测试条件,取消上传任务。  
if (res.progress > 50) {  
uploadTask.abort();  
}  
});  
}
});

操作步骤:

uni.chooseImage({
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
const uploadTask = uni.uploadFile({
url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
name: 'file',
formData: {
'user': 'test'
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
}
});  
uploadTask.onProgressUpdate((res) => {  
console.log('上传进度' + res.progress);  
console.log('已经上传的数据长度' + res.totalBytesSent);  
console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);  

// 测试条件,取消上传任务。  
if (res.progress > 50) {  
uploadTask.abort();  
}  
});  
}
});

预期结果:

正常显示进度

实际结果:

没有显示进度

bug描述:

uni.chooseImage({
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
const uploadTask = uni.uploadFile({
url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
name: 'file',
formData: {
'user': 'test'
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
}
});  
uploadTask.onProgressUpdate((res) => {  
console.log('上传进度' + res.progress);  
console.log('已经上传的数据长度' + res.totalBytesSent);  
console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);  

// 测试条件,取消上传任务。  
if (res.progress > 50) {  
uploadTask.abort();  
}  
});  
}
});

更多关于uni-app uni.uploadFile 返回值uploadTask. onProgressUpdate一直是undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

你success或者fail回调中有输出吗?

更多关于uni-app uni.uploadFile 返回值uploadTask. onProgressUpdate一直是undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html


有的

用官网的例子,把URL换成我自己的,onprogress也是不执行

回复 8***@qq.com: 你提供一下一个问题项目我看一下

回复 DCloud_UNI_yuhe: 用官网的例子复现不出来吗?请问我怎么提供一个问题项目

回复 8***@qq.com: 新建一个测试项目,成功复现之后打包成 zip 发到评论区

这是一个在iOS平台上的已知兼容性问题。uni.uploadFile返回的uploadTask对象在iOS平台的某些版本中,onProgressUpdate回调可能无法正常触发。

问题原因:

  1. iOS平台对上传进度监控的支持存在限制
  2. 某些iOS版本或网络环境下,系统可能不会准确上报上传进度
  3. 云端打包时可能涉及到底层实现的差异

解决方案:

  1. 使用uni.onProgressUpdate全局监听
uni.onProgressUpdate((res) => {
    console.log('上传进度:', res.progress);
});
  1. 添加错误处理
uploadTask.onProgressUpdate((res) => {
    console.log('上传进度', res.progress);
}).onError((err) => {
    console.error('上传错误', err);
});
回到顶部