uni-app 安卓端 uni.uploadFile 上传图片服务器无法接受到信息

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app 安卓端 uni.uploadFile 上传图片服务器无法接受到信息

项目信息 详情
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 Windows 10 家庭中文版 版本号 22H2 安装日期 ‎2021/‎4/‎18 操作系统内部版本 19045.5011 体验 Windows Feature Experience Pack 1000.19060.1000.0
HBuilderX类型 正式
HBuilderX版本 4.24
手机系统 Android
手机系统版本 Android 13
手机厂商 小米
手机机型 小米11 Android 13
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

selectClick(e) {
    let sourceType = e.value == 1 ? ["camera"] : ["album"];
    uni.chooseImage({
        count: 1,
        sizeType: ["original"],
        sourceType: sourceType,
        success: async (files) => {
            this.uploadLoading = true
            uni.uploadFile({
                url: 'xxxxx',
                file: files.tempFiles[0],
                filePath: '',
                name: 'file',
                fileType: 'image',
                formData: {
                    profile: 'xxxxx',
                },
                success: (res) => {
                    this.uploadRoor = JSON.stringify(res)
                    // let response = JSON.parse(res.data)
                    // this.hiddenForm.annex = response.url
                },
                error: (res) => {
                    console.log(res)
                    this.uploadRoor = JSON.stringify(res)
                },
                complete: (res) => {
                    this.uploadLoading = false
                }
            })
        }
    })
},

操作步骤:

点击上传,选择相册/拍照,然后等待服务器返回是 null,web端都是正常的

预期结果:

获取到服务器返回的文件地址

实际结果:

返回空,因为服务器未接收到文件信息

bug描述:

app 上使用 uni.uploadFile 上传文件服务器无法接收到文件信息


3 回复

问题已解决


请问你是怎么解决的?我是传了多个文件,但是服务端只能接到一个文件,H5端正常,但是APP端就只能接受到1个文件。

uni-app 开发中,使用 uni.uploadFile 进行文件上传时,如果遇到安卓端上传图片但服务器无法接受到信息的问题,通常涉及几个方面的排查和解决。以下是一些可能的原因及对应的代码示例,用于帮助你定位并解决问题。

1. 检查上传地址是否正确

确保 uni.uploadFile 中的 url 参数正确无误,并且服务器能够正常接收 POST 请求。

uni.uploadFile({
    url: 'https://yourserver.com/upload', // 确保 URL 正确
    filePath: tempFilePaths[0], // 临时文件路径
    name: 'file', // 后端接收的文件字段名
    formData: {
        user: 'test'
    },
    success: (uploadFileRes) => {
        console.log('上传成功:', uploadFileRes.data);
    },
    fail: (err) => {
        console.error('上传失败:', err);
    }
});

2. 检查文件路径和权限

确保 filePath 是有效的图片路径,并且应用有读取文件的权限。在 Android 上,你可能需要在 manifest.json 中配置文件访问权限。

3. 检查服务器配置

确保服务器能够正确处理上传的文件,包括 MIME 类型、文件大小限制等。服务器端日志可以提供关键信息。

4. 检查网络请求和响应

使用网络调试工具(如 Charles、Fiddler)检查实际的网络请求和响应。查看请求头、请求体以及服务器响应的详细情况。

5. 编码和格式问题

如果上传的文件是图片,确保图片格式(如 JPG、PNG)被服务器支持,并且编码正确。

6. 异步处理和错误处理

确保上传逻辑正确处理异步操作和错误情况。例如,使用 async/await 或 Promise 来处理异步上传。

async function uploadImage(filePath) {
    try {
        const res = await uni.uploadFile({
            url: 'https://yourserver.com/upload',
            filePath: filePath,
            name: 'file',
            formData: {
                user: 'test'
            }
        });
        console.log('上传成功:', res.data);
    } catch (error) {
        console.error('上传失败:', error);
    }
}

7. 安卓特定问题

  • 确保 AndroidManifest.xml 中有适当的权限配置。
  • 检查是否有 Android 特定的安全策略或防火墙设置阻止上传。

如果以上步骤都确认无误,但问题依旧存在,建议检查 uni-app 和 Android SDK 的版本兼容性,或查看 uni-app 社区和官方文档是否有相关问题的讨论和解决方案。

回到顶部