uni-app uploadFile新版本报错 uploadFile:fail statusCode: null

uni-app uploadFile新版本报错 uploadFile:fail statusCode: null

测试过的手机:

harmonyOS 4.2.0

示例代码:

const customUpload = (file: UploadFile, formData, options) => {
    const uploadTask = uni.uploadFile({
        url: action,
        header: {
            'Authorization': userStore.token || ''
        },
        name: options.name,
        fileName: options.name,
        fileType: options.fileType,
        formData,
        filePath: file.url,
        success(res) {
            if (res.statusCode === 200) {
                // 设置上传成功
                options.onSuccess(res, file, formData)
            } else {
                // 设置上传失败
                options.onError({ ...res, errMsg: res.errMsg || '' }, file, formData)
            }
        },
        fail(err) {
            // 设置上传失败
            options.onError(err, file, formData)
        }
    })
    // 设置当前文件加载的百分比
    uploadTask.onProgressUpdate((res) => {
        options.onProgress(res, file)
    })
}

操作步骤:

  • 选择图片上传

预期结果:

  • 可以上传

实际结果:

  • 都没有发送请求就报错

示例图片

bug描述:

上传图片 手机端选择任意图片后 直接进入fail回调(并没有发送请求到服务器),报错内容是uploadFile:fail statusCode: null


更多关于uni-app uploadFile新版本报错 uploadFile:fail statusCode: null的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uploadFile新版本报错 uploadFile:fail statusCode: null的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题通常是由于文件路径格式不正确或权限问题导致的。在HarmonyOS 4.2.0系统中,uni.uploadFile对文件路径的格式要求比较严格。

解决方案:

  1. 检查文件路径格式

    • 确保file.url是有效的本地文件路径
    • 建议在调用uploadFile前添加路径验证:
    console.log('文件路径:', file.url);
    if (!file.url || file.url.startsWith('http')) {
        options.onError({errMsg: '无效的文件路径'}, file, formData);
        return;
    }
    
  2. 添加完整的错误处理

    • 在fail回调中输出详细错误信息:
    fail(err) {
        console.error('上传失败详情:', JSON.stringify(err));
        options.onError(err, file, formData);
    }
    
  3. 检查文件权限

    • 确保应用有访问相册和文件的权限
    • 在manifest.json中确认已配置必要的权限
  4. 临时解决方案

    • 可以尝试使用uni.chooseImage重新获取文件路径:
    uni.chooseImage({
        success: (chooseResult) => {
            file.url = chooseResult.tempFilePaths[0];
            // 重新执行上传
        }
    });
回到顶部