Попытка загрузить файлы, трудности с массивами - PullRequest
2 голосов
/ 08 мая 2019

Я пытаюсь загрузить файлы, но Multipartfiles не передаются должным образом.

Вот мой контроллер, где я пытаюсь добавить некоторые файлы.Возвращается только @RequestParam, Arrays.asList (files) возвращает пустой массив.Я добавлю результат печати строк ниже.

@Transactional
    @RequestMapping(path = "/profile/files", method=RequestMethod.POST)
    @ApiResponses(value = {
            @ApiResponse(code = HttpServletResponse.SC_BAD_REQUEST, message = "Wrong file type", response = ErrorResponse.class),
            @ApiResponse(code = HttpServletResponse.SC_FORBIDDEN, message = "Not authorized", response = ErrorResponse.class),
            @ApiResponse(code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message = "Internal Error", response = InternalErrorResponse.class)
    })
    @ResponseBody
    @ApiOperation(
            value = "Add files",
            tags = "Users"
    )
    public List<FileDto> addProfilePicture(@RequestParam("file") MultipartFile[] files) {
        System.out.println("Controller: Files from params: " + files.toString());
        List<MultipartFile> filesToAdd = Arrays.asList(files);
        System.out.println("Controller: Files Array.asList: " + filesToAdd);
        List<File> savedFiles = userService.addFiles(filesToAdd);
        System.out.println("Controller: Files returned from addFiles(): " + savedFiles);
        return savedFiles.stream().map(FileDto::new).collect(Collectors.toList());
    }

Это служебная часть:

public List<File> addFiles(List<MultipartFile> files) {

        System.out.println("Service: Input files: " + files);

        List<File> savedFiles = new ArrayList<>();

        for(MultipartFile file: files){
            File savedFile = fileService.save(file, FileService.LOCATION_DOCUMENT_FILE, S3Adapter.ACL_OWNER_ONLY);
            savedFiles.add(savedFile);
        }
        System.out.println("Service: Saved files: " + savedFiles);
        return savedFiles;
    }

Это то, что печатные строки производят для меня при попытке загрузитьизображения через почтальона:

Controller: Files from params: [Lorg.springframework.web.multipart.MultipartFile;@794108b7
Controller: Files Array.asList: []
Service: Input files: []
Service: Saved files: []
Controller: Files returned from addFiles(): []

1 Ответ

3 голосов
/ 08 мая 2019

Похоже, что при загрузке из POSTMAN вы используете опцию binary.Эта опция работает, только если вы получаете как HttpServletRequest / MultipartRequest.

Чтобы получить файлы как @RequestParam("files"), вам нужно использовать опцию form-data и дать ключ как files, а для значения выберите fileиз выпадающего списка выберите несколько файлов и отправьте запрос.Это будет работать нормально.

Screen Shot for your reference

...