7
votes

Spring 3.0 Filedupload uniquement avec Post?

J'essaie de télécharger un fichier avec un paramètre à l'aide du ressort 3.

Il s'agit de ma méthode de contrôleur qui doit activer ce service: xxx

Le problème est, que le serveur ne peut pas expédier à cette méthode: MissingsservletQuestParameTerException: paramètre de chaîne requis 'JSON' n'est pas présent

Si je change la requêteMethod de Mettez à la poste, tout va bien. Donc, tout le monde connaît le problème?

Il semble que cela ne soit pas autorisé à transmettre des données de formulaire via Met.

J'ai débogué un peu et la méthode suivante retourne false dans le Mettez le cas, mais vrai dans le cas de poste: xxx

J'apprécierais toute aide!

Merci d'avance!


5 commentaires

Faites-vous vraiment un mettre, ou utilisez-vous un hidenhttpmethodfilter?


La raison pour laquelle je suis sorti est que je voulais simuler un téléchargement de formulaire-Data, mais également en fonction de la création d'un nouvel objet (post) mais mettez à jour une version existante (mise)


Il semble que vous n'avez pas compris la question. Printemps Normaly façonne les demandes de placement et de suppression avec l'aide du hiddenhttpmethodfilter. (Parce que certains brosers ne soutiennent pas la mise en place), donc ma question est simple, utilisez-vous vraiment vraiment mettre et non un poste falsifié?


Ah Ok, maintenant je sais ce que tu veux dire. Non, je n'utilise pas de hiddenhttpmethodfilter puisque le client envoie ces demandes n'est pas un navigateur. J'ai le contrôle de la façon dont je demande le serveur (mettre / get / post ...)


Je recommande donc de quelque chose comme Andrei Bodnarescu, utilisez le post et le paramètre "HidenHTTPMEthodfilter" AM et "_method" = mettre.


4 Réponses :


2
votes

Vous ne pouvez pas envoyer de données de formulaire via Mettez conformément à la norme HTML. Vous ne pouvez envoyer que des fichiers via Met, et dans ce cas, ils sont envoyés plus efficacement, puis avec la poste (car vous n'avez plus toutes les surcharges multiples), mais pour vous mettre en place un composant côté serveur d'écoute pour recevoir un fichier VIA Mettez vous devez vous assurer que vous envoyez une commande de vente (via JavaScript par exemple). Voici un exemple qui utilise jQuery: xxx


1 commentaires

Merci, c'était ce que j'ai suggéré. Dans la RFC correspondante pour le téléchargement de fichier multipart / formulaire-de-forme, ils ne parlent que de publier des données, ne le mettant jamais. C'est ce qui me conduit aussi à votre suggestion. Le Reason I pris est que je voulais simuler un téléchargement de formulaire-Data, mais également en fonction de la création d'un nouvel objet (post), mais mettez à jour une version existante (mise)



4
votes

Je rencontre dans le même problème. Ma solution impliquait un ExtendedMultiparTresolver code> qui accepte les multiparts envoyés via la méthode HTTP Mettez également. Copiez simplement le CommonsMultiparTresolver code> code, renommez la classe et modifiez la mise en œuvre de la fonction ismultipart () code> à votre BESOINS:

<bean id="multipartResolver" class="sample.package.ExtendedMultipartResolver"/>


0 commentaires

5
votes

Vous pouvez accomplir cela en utilisant le ressort HiddenhttpMethodFilter , mais vous devrez vous assurer de mettre un printemps Multipartfilter Avant le HiddenHTTPMETHODFilter de votre chaîne de filtre Web.xml.

Par exemple: dans votre web.xml p> xxx pré>

puis dans votre ressort-config.xml Ajouter une référence à CommonsMultiPartresolver: P>

<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>


0 commentaires

1
votes

J'ai mis en place une solution légèrement différente, inspirée de http://rugal.ga/development/2015/10/03/uploadeding-file-Aucher-than-Post/ et proche d'un post précédent: xxx pré>

} p>

rien de nouveau ici, sauf que mon code s'appuie sur org.apache.commons.fileupload.fileduploadbase.ismultipartCartelon (DemandeContext) au lieu de dupliquer son contenu. P>

maintenant, si vous aviez besoin de Pour mettre en œuvre des tests d'unité de services de téléchargement de fichier, vous aurez peut-être utilisé org.springframework.test.web.servlet.request.web.servlet.request.mockmvcrequestbuilders.filedupload () de la manière suivante: p>

@Test
public void testUploadFilePut() throws Exception {
    MockMultipartFile multipartFile = new MockMultipartFile(...);
    String url = ...;
    mockMvc.perform(putFileUpload(url, multipartFile)).andExpect(status().isOk());
}


0 commentaires