2014-12-03 2 views
0

Я загружаю изображение с помощью form-data с изображением с ПК клиента на Spring MVC Server.Ошибка при загрузке файла из форм-данных в Spring Server

Обновление страницы:

<!DOCTYPE html > 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Spring MVC - Upload File</title> 
</head> 
<body> 
<form id="form1" method="post" action="/upload" enctype="multipart/form-data" accept-charset="utf-8"> 
<!-- File input -->  
<input name="file" id="file" type="file" /><br/> 
<input type="submit" value="Upload" /> 
</form> 
</body> 
</html> 

И это Spring Controller

@RequestMapping(value = "upload", method = RequestMethod.POST) 
public @ResponseBody 
String provaUpdate(MultipartHttpServletRequest request,Principal p,HttpServletResponse response)throws IOException { 
String result=""; 
LocalFileManager mLocalFileManager = LocalFileManager.get(); 
Iterator<String> iterator = request.getFileNames(); 
    while(iterator.hasNext()) 
    { 
     System.out.println("iterator.next()="+iterator.next()); 
    } 
     System.out.println("request.getFileMap().isEmpty()??"+request.getFileMap().isEmpty()); 
     // mLocalFileManager.saveLocalData(g,g.getPicturesCount(), request.getFile("new").getInputStream()); 
    return result; 
} 

Так что, когда я бегу, что он просто печатает:

request.getFileMap().isEmpty()??true

Тогда нет файлов, кажется, не загружен, но если я получаю request.getInputStream() я могу написать TXT файл, показывающий, что:

------WebKitFormBoundaryWG8vA5PuTFFxPBqK 
Content-Disposition: form-data; name="file"; filename="1.jpg" 
Content-Type: image/jpeg 
�� JFIF  ��ICC_PROFILE 蠠  mntrRGB XYZ ٠ $ acsp        �� ӭ )B9 
           desc D ybXYZ  bTRC Ԡ dmdd  ࠠ ɧXYZ 
h gTRC Ԡ lumi 
| meas 
//(Symbols) Long ETC, so the picture is sent !! 
------WebKitFormBoundaryWG8vA5PuTFFxPBqK-- 

Таким образом, кажется, что изображение отправляется правильно, но MultipartHttpServletRequest не может получить файл.

Какая у меня ошибка?

ответ

0

Ошибка в том, что я работаю с Thymeleaf, поэтому форма отличается.

Решено меняется, что:

1- Создать класс, который содержит MultipartFile, например:

public class Images { 
MultipartFile image; 
public MultipartFile getImage() { 
return image; 
} 
public void setImage(MultipartFile image) { 
this.image = image; 
} 
} 

2- Правильная форма код для Spring Сервер работает с Thymeleaf:

<form id="myform" action="#" th:action="@{/upload}" th:object="${Images}"  method="POST" modelAttribute="Images" enctype="multipart/form-data"> 
<input type="file" th:field="${Images.image}" name="file"/> 
<input type="submit" value="Upload"/> 
</form> 

И, наконец, правильный метод управления:

@RequestMapping(value = "upload", method = RequestMethod.POST) 
public String addVocabularyValadate(@ModelAttribute("Images") Images images,BindingResult bindingResult, 
        Model model) throws IOException 
{ 
System.out.println("inputstream Nombre!"+images.getImage().getOriginalFilename()); 
if(bindingResult.hasFieldErrors() == true) 
return "error"; 
else 
return "upload OK!"; 
} 
0

Я думаю, вам может быть недоставать ниже записи в вашем файле spring configuration xml.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
     <!-- below properties can be configured as per your need --> 
     <property name="maxUploadSize" value="5000000" /> 
     <property name="maxInMemorySize" value="5000000" /> 
    </bean> 
+0

Я конфигурирование моего сервера как Java приложение, поэтому я настроен эта часть так: '@Bean общественного MultipartConfigElement multipartConfigElement() { MultiPartConfigFactory factory = new MultiPartConfigFactory(); factory.setMaxFileSize ("256 КБ"); factory.setMaxRequestSize ("256 КБ"); return factory.createMultipartConfig(); } ' –