Je n'arrive pas à comprendre cela, peu importe ce que j'essaie. Je soumets cette commande curl:Spring Boot + méthode de contrôleur multipart/form-data
curl -v -F name=countries.zip -F [email protected] http://localhost:8080/rest
J'ai une application Boot Spring 1.4 avec un @RestController annoté avec la méthode suivante:
@RequestMapping(consumes = {"multipart/form-data"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, path = {"/rest", "/rest/**"})
public void handleMultipartRestApiRequest(MultipartHttpServletRequest request, HttpServletResponse response, @RequestPart(value = "filedata", required = false) MultipartFile filedata) throws Exception {
r...
}
La variable filedata est toujours nulle, et l'objet de la demande montre toujours 0 fichiers.
J'ai essayé plusieurs configurations avec MultipartResolver. Voici mon dernier:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(5000000);
multipartResolver.setMaxInMemorySize(5000000);
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
J'ai aussi bloqué manuellement ces dans mes application.properties juste pour être 1000% sûr qu'il est pas désactivé:
multipart.enabled=true
spring.http.multipart.enabled = true
et pour faire bonne mesure, voici les têtes de requête:
* Connected to localhost (::1) port 8080 (#0)
> POST /rest HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 817999
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------7d3f4606455e862b
>
Quelqu'un at-il la moindre idée pourquoi Je n'arrive pas à voir le fichier sur mon contrôleur?
MISE À JOUR 1:
Si je creuse assez loin dans l'objet de la requête et à l'objet org.catalina.connector.Request, il y a une liste de tableaux d'éléments ApplicationPart qui contiennent un DiskFileItem qui semble détenir des informations sur le fichier que j'essaye de télécharger. C'est en fait la Collection qui est retournée lorsque vous appelez request.getParts(). Le chemin de l'emplacement de l'élément de fichier est une long chemin tmp:
/private/var/folders/n8/15d6vbhj0692cslf3cx8c1jm0000gn/T/tomcat.6840182548028446450.8080/work/Tomcat/localhost/myapp
Cependant, il dit aussi le type de contenu est une application/octet-stream, la taille est -1, et d'autres bizarreries, comme « isFormField » est faux même si je le spécifie comme un champ de formulaire dans ma commande curl. Ainsi, spring appelle la méthode correcte pour gérer une requête multipart/form-data, mais les informations "part" semblent penser qu'il s'agit d'un flux d'octets.
Je pense modestement que vous n'avez pas instancié votre objet multi-parties. Comme: MultipartFile filedata = fileToBeAdded.getSomething(); –
Vous ne savez pas ce que vous voulez dire ... J'attends le fichier dans la requête. Si je fais quelque chose comme Map map = request.getFileMap() ;, la carte est vide. –
Bal
Essayez '@ RequestParam' à la place de' @ RequestPart'. –