Запрос был отклонен, потому что не было обнаружено многократной границы в весеннем бою

Как я пытаюсь сделать это с помощью spring boot и webservices с дополнениями chrome в почтовом ящике.

В postman content-type="multipart/form-data" и я получаю следующее исключение.

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

В контроллере я указал ниже код

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

Здесь я указываю код обработчика файла

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;
}

Ответ 1

Проблема заключается в том, что вы сами настраиваете Content-Type, пусть он будет пустым. Google Chrome сделает это за вас. Многостраничный Content-Type должен знать границу файла, а когда вы удаляете Content-Type, Postman будет делать это автоматически для вас.

Ответ 2

Снимите флажок с типа контента в Postman, и почтальон автоматически определяет тип контента на основе вашего ввода во время выполнения.

Sample

Ответ 3

Это сработало для меня: загрузка файла через Postman в веб-приложение бэкэнда SpringMVC:

Бэкэнд: Endpoint controller definition

Почтальон: Headers setup POST Body setup

Ответ 4

"Postman - REST Client" не подходит для выполнения почтовых действий с настройкой contenttytyty. Вы можете попробовать использовать "Advanced REST client" или другие.

Кроме того, заголовки заменялись потреблением и производились с Spring 3.1 M2, см. https://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements. И вы можете напрямую использовать produces = MediaType.MULTIPART_FORM_DATA_VALUE.

Ответ 5

проблема не в вашем коде. проблема с вашим запросом. вы не получаете какой-либо границы в многочастном запросе.

Ответ 6

У меня была такая же проблема, когда я отправлял запрос POST от Postman, а позже я мог решить проблему, установив собственный тип контента с установленным рядом с ним граничным значением.

Я думал, что люди могут столкнуться с подобной проблемой, и поэтому я делюсь своим решением.

postman

Ответ 7

Когда я использую почтальон для отправки файла размером 5,6 М во внешнюю сеть, я столкнулся с той же проблемой. (То же действие выполняется на моем собственном компьютере и в локальной среде тестирования.) После проверки всех настроек сервера и заголовков http я обнаружил, что причина в том, что у Postman могут возникнуть проблемы с имитацией запроса на внешний запрос http. Наконец, я успешно выполнил запрос sendfile на html-странице chrome. Просто в качестве ссылки :)

Ответ 8

Я столкнулся с этой проблемой, потому что я использую request.js, который пишет базу на Axios
И я уже установил defaults.headers в request.js

import axios from 'axios'
const request = axios.create({
  baseURL: '', 
  timeout: 15000 
})
service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

вот как я это решаю
вместо

request.post('/manage/product/upload.do',
      param,config
    )

Я использую Axios напрямую отправить запрос, а не добавить конфигурации

axios.post('/manage/product/upload.do',
      param
    )

надеюсь, что это может решить вашу проблему