web-dev-qa-db-fra.com

MultipartException: la requête actuelle n'est pas une requête multipartie

J'essaie de faire un contrôleur reposant pour télécharger des fichiers. J'ai vu cela Et fait ce contrôleur:

@RestController
public class MaterialController {

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public String handleFileUpload(
            @RequestParam("file") MultipartFile file){
        String name = "test11";
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }
}

et puis j'ai utilisé postman pour envoyer un pdf:

 enter image description here

Mais le serveur plante avec l'erreur suivante:

.MultipartException: Current request is not a multipart request

Encore une fois, j'ai trouvé this , et ajouté un fichier bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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

Malheureusement, il se plaint toujours de la même erreur.

16
Salman Lashkarara

Lorsque vous utilisez Postman pour une demande en plusieurs parties, ne spécifiez pas de type de contenu personnalisé dans l'en-tête. Votre onglet En-tête dans Postman doit donc être vide. Le facteur déterminera la limite des données de formulaire. Dans l'onglet Corps de Postman, vous devez sélectionner les données de formulaire et sélectionner le type de fichier. Vous trouverez une discussion sur ce sujet à l'adresse suivante: https://github.com/postmanlabs/postman-app-support/issues/576

26
abaghel

Il semble que le problème est que la demande au serveur n'est pas une demande en plusieurs parties. Fondamentalement, vous devez modifier votre formulaire côté client. Par exemple:

<form action="..." method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
</form>

J'espère que cela t'aides.

4
Javier Z.

Je faisais également face au même problème avec Postman pour multipart. Je l'ai corrigé en procédant comme suit:

  • Ne sélectionnez pas Content-Type dans la section Headers
  • Dans l'onglet Body de Postman, vous devez sélectionner form-data et sélectionner file type.

Cela a fonctionné pour moi.

2
Nilesh Kumar

Dans application.properties, veuillez ajouter ceci:

spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
spring.http.multipart.enabled=false

et dans votre formulaire html, vous avez besoin d'un: enctype="multipart/form-data".

<form method="POST" enctype="multipart/form-data" action="/">

J'espère que cette aide!

1
N.Luan Pham

dans ARC (Advanced Rest Client) - spécifiez ce qui suit pour le faire fonctionner Content-Type multipart/form-data (il s'agit du nom et de la valeur de l'en-tête) Cela vous permet d'ajouter des données de formulaire sous forme de clé et de valeurs. nommez-le maintenant selon vos spécifications REST et sélectionnez votre fichier à télécharger à partir du sélecteur de fichier.

0
Pravin