it-swarm.com.de

MultipartException: Die aktuelle Anforderung ist keine mehrteilige Anforderung

Ich versuche, einen unruhigen Controller zum Hochladen von Dateien zu erstellen. Ich habe this Gesehen und diesen Controller gemacht:

@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.";
        }
    }
}

und dann habe ich Briefträger benutzt, um ein pdf zu senden:

 enter image description here

Der Server stürzt jedoch mit dem Fehler ab:

.MultipartException: Current request is not a multipart request

Ich habe wieder this gefunden und eine bean.xml-Datei hinzugefügt

<?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>

Leider beklagt sich immer noch mit dem gleichen Fehler.

16

Wenn Sie Postman für eine mehrteilige Anforderung verwenden, geben Sie keinen benutzerdefinierten Inhaltstyp im Header an. Ihre Kopfzeilenregisterkarte in Postman sollte daher leer sein. Der Postbote bestimmt die Formulardatengrenze. Auf der Registerkarte Körper von Postman sollten Sie Formulardaten und Dateityp auswählen. Verwandte Diskussionen finden Sie unter https://github.com/postmanlabs/postman-app-support/issues/576

26
abaghel

Das Problem ist, dass die Anfrage an den Server keine mehrteilige Anforderung ist. Grundsätzlich müssen Sie Ihr clientseitiges Formular ändern. Zum Beispiel:

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

Hoffe das hilft.

4
Javier Z.

Das gleiche Problem hatte ich auch mit Postman für multipart. Ich habe es mit den folgenden Schritten behoben:

  • Wählen Sie nicht Content-Type im Abschnitt Headers aus. 
  • Im Body-Tab von Postman sollten Sie form-data und file type auswählen.

Es hat für mich funktioniert.

2
Nilesh Kumar

Fügen Sie in application.properties Folgendes hinzu:

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

und in Ihrem HTML-Formular benötigen Sie: enctype="multipart/form-data". Zum Beispiel:

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

Ich hoffe das hilft!

1
N.Luan Pham

in ARC (erweiterter Restclient) - Geben Sie wie unten angegeben an, damit es funktioniert Content-Type multipart/form-data (Hierbei handelt es sich um Headername und Headerwert) Damit können Sie Formulardaten als Schlüssel und Werte hinzufügen .__ Geben Sie nun einen Namen gemäß Ihrer REST - Spezifikation an und wählen Sie Ihre Datei zum Hochladen aus dem Dateiauswahlbereich aus.

0
Pravin