web-dev-qa-db-fra.com

La demande a été rejetée car aucune limite en plusieurs parties n'a été trouvée au démarrage du printemps.

Comme je l’essaye avec Spring Boot et des services Web avec des additifs Postman Chrome.

Dans postman content-type="multipart/form-data" et je reçois l'exception ci-dessous.

HTTP Status 500 - Request processing failed; 
nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is Java.io.IOException: 
org.Apache.Tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

Dans Controller j'ai spécifié le code ci-dessous

@ResponseBody
@RequestMapping(value = "/file", headers = "Content-Type= multipart/form-data", method = RequestMethod.POST)

public String upload(@RequestParam("name") String name,
        @RequestParam(value = "file", required = true) MultipartFile file)
//@RequestParam ()CommonsMultipartFile[] fileUpload
{
    // @RequestMapping(value="/newDocument", , method = RequestMethod.POST)
    if (!file.isEmpty()) {
        try {
            byte[] fileContent = file.getBytes();
            fileSystemHandler.create(123, fileContent, name);
            return "You successfully uploaded " + name + "!";
        } catch (Exception e) {
            return "You failed to upload " + name + " => " + e.getMessage();
        }
    } else {
        return "You failed to upload " + name + " because the file was empty.";
    }
}

Ici, je spécifie le code du gestionnaire de fichiers

public String create(int jonId, byte[] fileContent, String name) {
    String status = "Created file...";
    try {
        String path = env.getProperty("file.uploadPath") + name;
        File newFile = new File(path);
        newFile.createNewFile();
        BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(newFile));
        stream.write(fileContent);
        stream.close();
    } catch (IOException ex) {
        status = "Failed to create file...";
        Logger.getLogger(FileSystemHandler.class.getName()).log(Level.SEVERE, null, ex);
    }
    return status;
}
31
Mohammed Javed

Le problème est que vous définissez vous-même le type de contenu, laissez-le vide. Google Chrome le fera pour vous. Le Content-Type en plusieurs parties doit connaître la limite du fichier. Lorsque vous supprimez le Content-Type, Postman le fait automatiquement pour vous. 

66
de.la.ru

Décocher le type de contenu dans Postman et postman détecte automatiquement le type de contenu en fonction de votre saisie lors de l'exécution.

Échantillon

11
Bala

Cela a fonctionné pour moi:

Backend:  Endpoint controller definition

Facteur:  Headers setup  POST Body setup

9
gorjanz

Le "Postman - REST Client" ne convient pas pour les actions ultérieures avec la définition du type de contenu. Vous pouvez essayer d'utiliser le "client avancé REST" ou autres.

De plus, les en-têtes ont été remplacés par consommés et produits depuis le printemps 3.1 M2, voir https://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements . Et vous pouvez directement utiliser produces = MediaType.MULTIPART_FORM_DATA_VALUE.

2
tomeokin

lorsque j'utilise postman pour envoyer un fichier de 5.6M au réseau externe, j'ai rencontré le même problème. La même action est réussie sur mon propre ordinateur et mon environnement de test local.) Après avoir vérifié toutes les configurations de serveur et tous les en-têtes http, j’ai trouvé que la raison en est que Postman pouvait rencontrer des difficultés lors de la simulation d’une requête HTTP externe . Enfin, j’ai fait avec succès la demande sendfile sur la page html chrome . Juste comme référence :)

0
hao huang

Je rencontrais le même problème en faisant une demande POST de Postman. Plus tard, je pouvais résoudre le problème en définissant un type de contenu personnalisé avec une valeur limite définie comme ceci. 

Je pensais que les gens pouvaient rencontrer un problème similaire et par conséquent, je partage ma solution. 

 postman

0
Reaz Murshed