l***@sina.cn
l***@sina.cn
  • 发布:2024-12-24 21:39
  • 更新:2024-12-24 22:40
  • 阅读:23

【报Bug】uni.uploadFile不支持多文件批量上传,批量上传,后端只能接到一个文件

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 家庭版 23H2

HBuilderX类型: 正式

HBuilderX版本号: 4.36

手机系统: Android

手机系统版本号: Android 12

手机厂商: 华为

手机机型: HUAWEI ART-AL00x

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
let uploadUrl = HttpUtils.GET_BASE_URL() + this.url+"/register";  
        return new Promise((resolve, reject)=>{  
            uni.uploadFile({  
                url: uploadUrl,  
                files: files,  
                header: {},  
                formData: form,  
                success(uploadFileRes) {  
                    console.log(uploadFileRes);  
                    let resp = uploadFileRes.data;  
                    if(typeof resp === "string") {  
                        resp = JSON.parse(resp);  
                    }  
                    resolve(resp);  
                },  
                fail(resp) {  
                    console.log(resp);  
                    reject(resp);  
                }  
            })  
        })

操作步骤:

APP端使用uni.uploadFile上传多张图片,同一个name,后端使用同一个参数接受

预期结果:

APP端上传的文件,后端可以接收到多长图片

实际结果:

APP端上传的文件,后端只能接受到一张图片

bug描述:

uni.uploadFile,传多个文件,同一个name,后端只能接到一个文件,在H5端正常,都能接到,但是在APP端只能接到一个
传到后端的json数组如图
因为场景是多文件上传,具体传几个文件没有限制,所以后端是用一个数组来接收这个批量文件的。

2024-12-24 21:39 负责人:无 分享
已邀请:
l***@sina.cn

l***@sina.cn (作者)

试了一下,用不同的name是可以上传成功,可是对于接口来说很不友好呀,难道官方是希望我服务端的接口写成这样?

@PostMapping("/testFile")  
    @ResponseBody  
    public void testFile(@RequestParam(value = "pictureFiles_0", required = false) MultipartFile file0  
            , @RequestParam(value = "pictureFiles_1", required = false) MultipartFile file1, @RequestParam(value = "pictureFiles_2", required = false) MultipartFile file2  
            , @RequestParam(value = "pictureFiles_3", required = false) MultipartFile file3, @RequestParam(value = "pictureFiles_4", required = false) MultipartFile file4  
            , @RequestParam(value = "pictureFiles_5", required = false) MultipartFile file5, @RequestParam(value = "pictureFiles_6", required = false) MultipartFile file6  
            , @RequestParam(value = "pictureFiles_7", required = false) MultipartFile file7, @RequestParam(value = "pictureFiles_8", required = false) MultipartFile file8  
            , @RequestParam(value = "pictureFiles_9", required = false) MultipartFile file9) {  
        System.out.println("==============files.length===========");  
    }
  • l***@sina.cn (作者)

    这样用来实现批量上传,也忒坑了吧?有没有办法解决一下。。。

    2024-12-24 22:29

  • l***@sina.cn (作者)

    我这是上传10张,万一我要是上传20张,那我这接受参数得写20个?

    2024-12-24 22:30

l***@sina.cn

l***@sina.cn (作者)

抱歉抱歉,是我学艺不精,后端不能再用Multipart来接收了,应该用MultipartRequest来接收,然后再自行处理,代码如下:

files.getMultiFileMap().forEach((key, multipartFiles) -> {  
            MultipartFile multipartFile = multipartFiles.get(0);  
            //对文件的具体操作  
        });

但是,实话说,虽然我这个问题解决了,但是为什么H5可以这样批量上传,APP却要服务端处理呢?这是个问题。

l***@sina.cn

l***@sina.cn (作者)

我发现,提BUG基本没有官方的人来回答,邀请了也没用,可是UNIAPP却又有这么多的问题,这么多用的不方便的地方,唉。。。估计只有付费技术咨询,才会有人来解答吧。uniapp祝你越来越好。

要回复问题请先登录注册