使用jfinal多文件上传的时候如果文件域使用html5的multiple="multiple"属性getFiles得不到正确的文件数

helloyangxp 发布于 2014/05/12 22:53
阅读 3K+
收藏 1
@jfinal 今天使用jfinal做一个wap应用的时候需要用到jfinal的文件上传但是在使用过程中发现多文件上传的时候使用html5的multiple="multiple"属性时 List<UploadFile> uploadList = getFiles("xxxx"); 得不到正确的 文件个数,总是为一个,但是文件确实是全部都上传到了服务器。而单文件上传的时候没有这方面的问题!
加载中
1
h
helloyangxp
@jfinal 找到问题的原因所在了!估计是因为html5的 multiple属性是将file文件域在表单里内部处理成多个相同名称的file文件域,这样就导致jfinal上传无法处理!因为jfinal使用的是COS的com.oreilly.servlet.MultipartRequest 这个无法处理这种情况,而需要使用COS里面另外的一个上传处理类com.oreilly.servlet.multipart.MultipartParser这个是可以分别获取到文件不会产生MultipartRequest 的覆盖现象,只是MultipartParser在将文件写入服务器的时候需要注意文件名相同文件名它不支持自动的重命名,需要处理下!其他的就差不多!建议jFinal可以适当的做些调整!
ecp
ecp
求下循环的办法
Java_weber
Java_weber
这个答案给力啊,我就是用这个类去循环出来的,哈哈,感觉好爽,自己写接收方法,好友成就感。。。。
0
JFinal
JFinal
这个问题很奇怪,从来没有出现过,试试调用 getFiles()
h
helloyangxp
刚刚调了下jfinal上传源代码,发现那个cos上传的jar包多文件的时候返回的就是一个对象,悲剧啊!
h
helloyangxp
文件都是成功上传到了服务器,但是getFiles()获取的文件数始终不对!
h
helloyangxp
都试过的啊!貌似都不行啊!
0
类子
今天也遇到了 getFiles()获取的文件数不对,请问是如何解决的?
h
helloyangxp
大致是这样,不过你需要注意文件名如果上传文件夹有相同文件名就会覆盖掉!需要自己处理下! MultipartParser mp = new MultipartParser(this.getRequest(), MAX_FILE_SIZE, false, false, "UTF-8");循环mp判断是参数还是文件就可以了!
0
h
helloyangxp

@ecp 其实也蛮好处理判断是文件部分还是参数部分然后分别处理就可以了。

MultipartParser mp = new MultipartParser(this.getRequest(), 52428800, false, false, "UTF-8");
    Part part = null;
    while ((part = mp.readNextPart()) != null) {
	String name = part.getName();
	if (part.isParam()) {
	    ParamPart paramPart = (ParamPart) part;
	    String value = paramPart.getStringValue();
	    // 处理获取到的参数信息
	} else if (part.isFile()) {
	    FilePart filePart = (FilePart) part;
	    String fileName = filePart.getFileName();
	    fileNameList.add(fileName);// 所有上传的文件名
	    // 写文件到服务器
	    FileUtil.writeFile(filePart.getInputStream(), savePath, fileName);
	}
    }



返回顶部
顶部