Springboot Необходимая часть запроса «файл» отсутствует

Я работаю над контроллером загрузки файлов, и в настоящее время я получаю следующую ошибку при тестировании в 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;
        }

    }
}

сначала удалите производит = MediaType.IMAGE_JPEG_VALUE, это означает, что возврат этого запроса будет файлом jpeg или изображением. И как вы отправляете файл от почтальона. Можете ли вы поделиться им?

Muhammad Ahmed 18.04.2019 17:22

@Muhammad В разделе «Тело» я проверил данные формы, а затем мое значение — это мой файл jpg, который я пытаюсь отправить. Я ничего не проверял под заголовками или где-либо еще

Stephen 18.04.2019 17:34

ключ файла должен быть "file" . для большего понимания смотрите этот сайт callicoder.com/…

Muhammad Ahmed 18.04.2019 17:39

@Muhammed Да Файл уже установлен в качестве ключа

Stephen 18.04.2019 17:40
4
4
5 163
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это сложно, не зная, как вы отправляете данные, но вот как я решил отправить 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 с панелью имени поля.

Спасибо за ваш ответ, я добавил ответ, который решил мою проблему

Stephen 19.04.2019 21:22

Я провел точно такое же тестирование и ту же конфигурацию, что и вы, и это не решило проблему. Я на весенней загрузке 1.5.9

Dimitri Kopriwa 30.03.2020 12:19

Поскольку вы не упомянули свою модель запроса, пусть это будет запрос на заработок, поэтому знайте, что данные вашей модели:

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

}

Спасибо за ваш ответ, я добавил ответ, который решил мою проблему

Stephen 19.04.2019 21:22
Ответ принят как подходящий

В почтальоне под "ключом" ничего не ставил. Мне нужно было установить это как «файл». Раньше я предполагал, что все, что мне нужно было сделать, это щелкнуть раскрывающийся список и выбрать файл.

Я включу ниже весь обновленный код и ссылку на изображение, которое лучше объясняет это (я не смог отобразить изображение здесь, так как репутация <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;
        }
    }
}

У меня это не сработало, почтальон по-прежнему терпит неудачу с той же ошибкой\

Dimitri Kopriwa 30.03.2020 12:16

Другие вопросы по теме