Téléchargement de plusieurs fichiers Spring MVC avec la fonction de formulaire de fichiers multiples HTML5
Je suis en train de télécharger plusieurs fichiers à l'aide de printemps 3.1.2 avec @Contrôleur et @RequestMapping.
Voici ce que j'ai fait et ma configuration.
Html5 forme :
<form action="addFileSystemImage.foo" method="post" enctype="multipart/form-data">
<input class='fileInput' type="file" name="files[]" multiple="multiple" />
<input type="text" value="13asdf12eadsf" name="locId"/>
<input type="submit" />
</form>
Méthode de contrôleur :
@RequestMapping(value="/publisher/addFileSystemImage.foo", method=RequestMethod.POST)
public @ResponseBody List<UploadedFile> addFileSystemImage(@RequestParam("files[]") ArrayList<MultipartFile> files, String locId, HttpServletRequest request) {
//do lotsa voodoo rocket science here to process the files
}
ma conf :
<mvc:annotation-driven />
<context:component-scan base-package="foo.package"></context:component-scan>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
De la soumission du formulaire est de la addFileSystemImage méthode. Les données pour locId argument est ici, mais les "fichiers" de l'argument n'est pas lié. Il est systématiquement nulle quelle que soit la combinaison de l'argument des noms de champ //les types d'argument que j'ai essayé.
Le HttpServletRequest argument est un org.springframework.web.multipart.de soutien.DefaultMultipartHttpServletRequest et il est titulaire d'un multiPartFile attribut qui détient effectivement le fichier de données. En regardant sa valeur dans le debug me donne
{files[]=[org.springframework.web.multipart.commons.CommonsMultipartFile@16afd7f9, org.springframework.web.multipart.commons.CommonsMultipartFile@728c2811, org.springframework.web.multipart.commons.CommonsMultipartFile@4f9aaed7]}
qui signifie que mes fichiers[] est en effet ici ... mais de toute façon il ne passe pas à la liaison de données de l'étape correctement ...
Maintenant ... je sais tu vas me dire que je peux récupérer les données à partir de la demande ... mais je préfère avoir ce travail correctement ... le Sring... 🙂 et mon ArrayList de MultipartFile correctement renseigné.
Suis-je raté quelque chose ? Quelqu'un a fait ce travail correctement ? Que puis-je faire pour avoir cette liste de tableaux (ou même un Tableau normal ) peuplées?
Je suis tombé sur cette solution
Spring MVC, ajax upload de fichier et MultipartFile qui fait à peu près la même chose que je suis mais, évidemment, je dois être en train de faire quelque chose de mal, puisque cette solution ne fonctionne pas pour moi.
Remarque : j'ai réussi à le faire fonctionner avec un seul téléchargement de fichiers. Mais mon défi aujourd'hui est d'obtenir plusieurs fichiers à la fois.
Toute aide appréciée.
Merci d'avance.
source d'informationauteur azpublic
Vous devez vous connecter pour publier un commentaire.
Bien que vous avez déjà obtenu votre réponse merci à Alex, j'aimerais développer un peu. Avec le Printemps, la liaison, les champs de formulaire sont liés à leur "nom" attributs dans le code HTML. Puisqu'il est impossible d'avoir un champ de formulaire nommé fichiers[] (si l'on déclare une variable de même nom que la syntaxe, son nom est fichiers, mais il est un tableau de déclarer le type), le Printemps ne pouvais pas le faire correspondre et le comportement dans ce cas, c'est mépriser les données dans la demande.
À l'aide d'un type comme MultipartFile, vous pouvez utiliser une Liste nommée "fichiers" ou d'un tableau comme les exemples suivants:
Appropriés getters et setters, vous pouvez ensuite accéder et de mutation de la liste des fichiers en conséquence.
Ont inclus commons fileupload dépendance?
J'ai testé la fileupload fonctionne très bien, même avec ArrayList comme le type de paramètre sur le contrôleur de gestionnaire