Запрос был отклонен, потому что не было обнаружено многократной границы в весеннем бою
Как я пытаюсь сделать это с помощью 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]()
Почтальон:
![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
)
надеюсь, что это может решить вашу проблему