problema com o upload do arquivo spring ajax

Eu tenho um formulário simples com uma opção para fazer upload de imagem, mas para fazer upload de um arquivo eu não estou usando esse método

 

em vez disso eu estou usando ajax upload jquery pulgin . O problema é que upload.parseRequest (request) está retornando null no código abaixo:

 @RequestMapping(value = "/upload.htm", method = RequestMethod.POST) public @ResponseBody String upload(HttpServletRequest request) throws FileUploadException{ // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request List items = upload.parseRequest(request); System.out.println("====ITEMS====" + items.size()); System.out.println("----REQUEST---" +request.getParameter("uploadImg")); System.out.println("-----SIZE----" +request.getParameterMap().size()); Map map = request.getParameterMap(); for(Map.Entry entry : map.entrySet()){ System.out.println("----KEY---" + entry.getKey() + "----value---" + entry.getValue()); } // Check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(request); System.out.println("----IS MULTIPART---" +isMultipart); return "hello"; } 

A saída do log é:

==== ITENS ==== 0
—- PEDIDO — null
—– TAMANHO —- 0
—- É MULTIPART — true

E meu código javascript é:

 new AjaxUpload('#upload', { action : my_url+ 'methodName/upload.htm', name : 'uploadImg', autoSubmit : true, responseType: 'html', onChange: function(file, extension){ }, onSubmit: function(file, extension) { }, onComplete: function(file, html) { alert(file); alert(html); } 

});

É MULTIPART está mostrando verdade, mas como obter o nome do arquivo e como armazená-lo . Eu tentei um exemplo sem ajax e funciona bem usando o tipo de dados CommonsMultipartFile. Também usei o ajaxupload em PHP e recebo o nome do arquivo como $ _FILES [‘image’] [‘name’] mas não faço idéia em java, já que sou novo em java. Eu segui minha pergunta semelhante neste site, mas não obtive sucesso.

Obrigado.

Você pode fazer isso mais curto. Você precisa de um resolvedor multipartes:

     

E depois:

 @Controller public class FileUpoadController { @RequestMapping(value = "/form", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // store the bytes somewhere return "redirect:uploadSuccess"; } else { return "redirect:uploadFailure"; } } } 
 @RequestMapping(value = "/imageUpload", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { System.out.println("File name:"+ file.getOriginalFilename()); //byte[] bytes = file.getBytes(); System.out.println("Content type:"+ file.getContentType()); String [] contentType = file.getContentType().split("/"); String fileType = contentType[contentType.length-1]; System.out.println("File type:"+ fileType); System.out.println("File size:"+ (file.getSize()/1024) + "KB"); String path = context.getRealPath( "/resources/images/"); System.out.println("Path: " + path); InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = file.getInputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { outputStream = new FileOutputStream(path + file.getOriginalFilename()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } int readBytes = 0; byte[] buffer = new byte[8192]; try { while ((readBytes = inputStream.read(buffer, 0, 8192)) != -1) { outputStream.write(buffer, 0, readBytes); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { outputStream.close(); inputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // store the bytes somewhere return "theme"; } else return "uploadError"; }