关于JFinal的单个input标签type=file的multiple="multiple"多图片上传,每次只接收到一个uploadFile对象的解决办法。

本文介绍了解决JFinal框架中使用单个input标签实现多文件上传时,仅接收到一个文件的问题。通过修改源码确保能正确处理多个文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 关于JFinal的单个input标签type=file的multiple="multiple"多图片上传,每次只接收到一个uploadFile对象的解决办法。

    背景:我开发一个认证图片的上传功能,上传5张图片;我的上传图片的标签写法如下:

    <input id="ziZhiImage5" name="ziZhiImage5" type="file" multiple="multiple" class="file-loading" accept="image/*">
     
    注意:form标签要加上method="post" enctype="multipart/form-data"


1、遇到问题:我发现每次我用List<UploadFile> uploadFiles = getFiles();

函数获得的uploadFiles的size()都是1 ,而不是5。是哪里出了问题呢?

然后我给getFiles();加了个path = "123";

List<UploadFile> uploadFiles = getFiles(path);

我发现这个路径下,有5张图片了,说明上传上来了,但是还是返回一张。

然后我就老办法,打断点,追踪代码,然后发现问题出在。

MultipartRequest这个类的的271行代码:

files.put(name, new UploadedFile(dir.toString(), filePart.getFileName(), fileName, filePart.getContentType()));

因为input的标签name = ziZhiImage5,每次name都一样,它往files里put的时候最后都覆盖了。找到问题了,就解决问题。

2、解决思路,我在上面那个代码上加了一个代码;

if(files.containsKey(name)) {
          name = name + UUIDGen.UUID();
    }
    files.put(name, new UploadedFile(dir.toString(), filePart.getFileName(), fileName, filePart.getContentType()));


这样,你后期代码可以这样比较(注意indexOf函数):

   List<UploadFile> uploadFiles = getFiles(path);
            
            for (UploadFile uploadFile : uploadFiles) {
                if (uploadFile.getParameterName().indexOf("ziZhiImage5") != -1) {
                    ziZhiImage5List.add(uploadFile);
                } else {
                    yingYeZhiZhaoImageList.add(uploadFile);
                }
            }

于是问题来了,我知道怎么搞定这个bug了,我把我的


if(files.containsKey(name)) {
              name = name + UUIDGen.UUID();
        }


    这行代码加入人家jar包的代码里。


3、最终解决办法,还是借助网络的力量,看见网友有个解决办法。

(1):在自己的src目录下建个包:com.oreilly.servlet

(2):把反编译的MultipartRequest.java,复制到这个包里

(3):把你的那行代码加进去;

备注:自己的类如果和jar的类名,包名一模一样,咱自己写的类优先级高。

4、结果:这个问题就搞定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值