我有一个表单,允许用户选择要上传到服务器的多个图像。问题是我的控制器files.size()
返回one
,即使我没有选择任何要上传的文件。所以行if(files != null && files.size() > 0)
总是被执行。
@RequestMapping(value="/advert/add", method=POST)
public void insertAdverts(HttpServletRequest request,
HttpServletResponse response,
@ModelAttribute("fileUpload") FileUpload fileUpload)
throws NumberFormatException, IOException, IllegalStateException,
ServletException, FileUploadException{
//Get uploaded files and store them
List<MultipartFile> files = fileUpload.getFiles();
List<String> fileNames = new ArrayList<String>();
try{
if(files != null && files.size() > 0){
for(MultipartFile image:files){
String fileName = image.getOriginalFilename();
String[] fileSplit = fileName.split("\\.");
fileNames.add(fileName);
File uploadedFile = new File(uploadDirectory+"\\"+fileName);
uploadedFile.createNewFile();
image.transferTo(uploadedFile);
}
}
这是FileUpload Class
public class FileUpload implements Serializable{
private static final long serialVersionUID = 1L;
private int menuId;
private int subMenuId;
private String adLocation;
private String adSubject;
private String adBody;
private String contactNo;
private String contactEmail;
private String fileName;
private List<MultipartFile> files = null;
.....
和jsp表单
<form:form id = "add-advert-form" method="post" action="/AdPost/advert/add"
enctype="multipart/form-data" modelAttribute="fileUpload">
...
<form:input type="file" id="adPictures" accept="image/*"
name="files[]" multiple="multiple" path="files"/>
</form:form>
有人可以告诉我为什么List.size()
正在返回one
而不是zero
以及如何获得正确的列表大小。
这是调试窗口中的文件:
答案 0 :(得分:0)
我遇到了同样的问题,我要做的是检查列表中的第一个商品尺寸。 这是我使用groovy的代码
if(!files.get(0).isEmpty){
}
答案 1 :(得分:0)
这是一般信息,可能会对其他人有所帮助,并且绝对可以解决这个问题。
根据this official Mozilla Developer链接,这里是有关输入类型文件的注释。
因此只需通过调试检查后端文件参数的值是什么。
注意:如果选择了多个文件,则字符串代表第一个 选定的文件。 JavaScript可以通过 输入的文件属性。如果尚未选择文件,则字符串为“” (空)。该字符串以C:\ fakepath \为前缀,以防止 猜测用户文件结构的恶意软件。
答案 2 :(得分:0)
我最近遇到这个问题,并问了同样的问题。我只是想出了这个解决方案。如果您是这样:
if(files[0].getSize() != 0)
我知道这已经很晚了,但希望以后能对某人有所帮助。