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:
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.
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
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.
Je faisais également face au même problème avec Postman
pour multipart
. Je l'ai corrigé en procédant comme suit:
Content-Type
dans la section Headers
. Body
de Postman
, vous devez sélectionner form-data
et sélectionner file type
.Cela a fonctionné pour moi.
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!
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.