2016-09-26 2 views
2

J'essaye d'envoyer un fichier au contrôleur en l'utilisant dans FormBodyPart, plutôt que de lui envoyer directement le fichier. Voici le code pour faire une collection de fichiersSpring org.springframework.web.multipart.support.MissingServletRequestPartException, Required partie de la requête 'file' n'est pas présent

private void addFile(Collection<FormBodyPart> parts, File inputFile, String fileType) 
     throws ClassificationException { 
    if (inputFile == null) { 
     throw new ClassificationException("Null input file provided"); 
    } 
    if (!inputFile.exists()) { 
     throw new ClassificationException("Input file not found: " + inputFile.getAbsolutePath()); 
    } 
    if (fileType != null) { 

     String charset = "UTF-8"; 
     parts.add(new FormBodyPart("file", new FileBody(inputFile, fileType, charset))); 

    } else { 
     parts.add(new FormBodyPart("file", new FileBody(inputFile, inputFile.getName()))); 
    } 
} 

La collection de pièces est un arraylist, qui contiendrait les fichiers.

Voici mon code pour le réglage Http Entité

HttpPost httppost = new HttpPost("http://localhost:9000/upload1"); 
      MultipartEntity reqEntity1 = new MultipartEntity(); 
      FormBodyPart part1; 
      for (Iterator i$ = parts.iterator(); i$.hasNext(); reqEntity1.addPart(part1)) { 
       part1 = (FormBodyPart) i$.next(); 
       System.out.println(part1.getHeader()); 
      } 

      httppost.setEntity(reqEntity1); 
      HttpResponse response = httpclient.execute(httppost); 
      System.out.println(response); 

Ma déclaration de méthode de commande est

String index(@RequestParam("file") MultipartFile uploadfile)

Je reçois une erreur du serveur indiquant

[ 400] {"timestamp": 1474898550131, "status": 400, "error": "Demande incorrecte", "exception": "o rg.springframework.web.multipart.support.MissingServletRequestPartException », "message": "une partie de la demande requise 'fichier' est pas présent", "chemin": "/ Upload1"}

Mon dispatcher.xml contient déjà haricot de multipartResolver. Je suis assez nouveau pour les services Web et peut-être faire une sorte d'erreur idiote. S'il vous plaît aidez-moi, merci d'avance

+0

Vous ne devriez pas utiliser '$' dans les noms de variables. [Java Language Specification §3.8] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.8): * Le signe '$' ne doit être utilisé que dans code source généré mécaniquement ou, rarement, accéder à des noms préexistants sur les systèmes hérités. * – Andreas

+0

Etes-vous sûr que 'parts' n'est pas vide? – Andreas

+0

Lorsque j'imprime des pièces, il montre "[[email protected]]", donc je ne pense pas qu'il soit vide. –

Répondre

1
verify if you have this items: 
@Bean 
public CommonsMultipartResolver multipartResolver() { 
CommonsMultipartResolver multipart = new CommonsMultipartResolver(); 
multipart.setMaxUploadSize(3 * 1024 * 1024); 
return multipart;} 

@Bean 
@Order(0) 
public MultipartFilter multipartFilter() { 
MultipartFilter multipartFilter = new MultipartFilter(); 
multipartFilter.setMultipartResolverBeanName("multipartResolver"); 
return multipartFilter; 
} 


and in the pplications.properties 


# MULTIPART (MultipartProperties) 
spring.http.multipart.enabled=true 
# Enable support of multi-part uploads. 
# spring.http.multipart.file-size-threshold=3 # Threshold after which files will be written to disk. Values can use the suffixed "MB" or "KB" to indicate a Megabyte or Kilobyte size. 
spring.http.multipart.location=/
# Intermediate location of uploaded files. 
spring.http.multipart.max-file-size=10MB 
# Max file size. Values can use the suffixed "MB" or "KB" to indicate a Megabyte or Kilobyte size. 
spring.http.multipart.max-request-size=10MB 
# Max request size. Values can use the suffixed "MB" or "KB" to indicate a Megabyte or Kilobyte size. 
spring.http.multipart.resolve-lazily=false 
# Whether to resolve the multipart request lazily at the time of file or parameter access. 
+0

Merci @pablo! L'application.properties m'aide vraiment à partir des jours de recherche ... – Hongliang