Я работаю над контроллером загрузки файлов, и в настоящее время я получаю следующую ошибку при тестировании в Postman.
{
"timestamp": "2019-04-18T14:53:07.988+0000",
"status": 400,
"error": "Bad Request",
"message": "Required request part 'file' is not present",
"path": "/upload"
}
На данный момент мой контроллер очень простой, но сначала мне нужно решить эту проблему.
Я посмотрел на данные ответы [здесь] (загрузить файл springboot Обязательная часть запроса «файл» отсутствует "загрузить файл springboot. Требуемый файл части запроса отсутствует")!
Но, к сожалению, все предложенное здесь не решило мою проблему.
Любая помощь с этой ошибкой будет оценена
Это мой контроллер:
@Controller
public class UploadController {
@ResponseBody
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public boolean upload(@RequestParam("file") MultipartFile file) throws IOException {
try {
if (!file.isEmpty()) {
return true;
} else {
return false;
}
}
catch(Exception e){
e.printStackTrace();
return false;
}
}
}
@Muhammad В разделе «Тело» я проверил данные формы, а затем мое значение — это мой файл jpg, который я пытаюсь отправить. Я ничего не проверял под заголовками или где-либо еще
ключ файла должен быть "file" . для большего понимания смотрите этот сайт callicoder.com/…
@Muhammed Да Файл уже установлен в качестве ключа
Это сложно, не зная, как вы отправляете данные, но вот как я решил отправить multipart/form-data через @RestController:
@PostMapping(value = "/foo", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ResponseEntity fileUpload(@Requestparam("bar") LinkedList<MultipartFile> payload) {
MultipartFile file = payload.get(0)
...
В моем случае Spring просто не принял бы ничего, кроме связанного списка, но это были данные формы, отправленные как объект Angular2+ FormData с панелью имени поля.
Спасибо за ваш ответ, я добавил ответ, который решил мою проблему
Я провел точно такое же тестирование и ту же конфигурацию, что и вы, и это не решило проблему. Я на весенней загрузке 1.5.9
Поскольку вы не упомянули свою модель запроса, пусть это будет запрос на заработок, поэтому знайте, что данные вашей модели:
class EarningRequest{
private FilePart file;
//and other data which you want to add.
//add the getter setters also, so that jackson can map the json to this pojo
}
@RestController
public class UploadController {
@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public boolean upload (@ModelAttribute EarningRequest earningRequest){
//earningRequest contains the file
//you can get the filePart as earningRequest.getFile()
return true;
}
}
Спасибо за ваш ответ, я добавил ответ, который решил мою проблему
В почтальоне под "ключом" ничего не ставил. Мне нужно было установить это как «файл». Раньше я предполагал, что все, что мне нужно было сделать, это щелкнуть раскрывающийся список и выбрать файл.
Я включу ниже весь обновленный код и ссылку на изображение, которое лучше объясняет это (я не смог отобразить изображение здесь, так как репутация <10)
ссылка на изображение почтальона
@RestController
public class UploadController {
@PostMapping("/upload")
@ResponseBody
public boolean upload(@RequestParam("file") MultipartFile file) {
try{
if (file.isEmpty() ==false){
System.out.println("Successfully Uploaded: "+ file.getOriginalFilename());
return true;
}
else{
System.out.println("ERROR");
return false;
}
}
catch(Exception e){
System.out.println(e);
return false;
}
}
}
У меня это не сработало, почтальон по-прежнему терпит неудачу с той же ошибкой\
сначала удалите производит = MediaType.IMAGE_JPEG_VALUE, это означает, что возврат этого запроса будет файлом jpeg или изображением. И как вы отправляете файл от почтальона. Можете ли вы поделиться им?