Разбитое изображение при загрузке с использованием Multipart File Controller - PullRequest
0 голосов
/ 21 мая 2018

Когда я пытаюсь загрузить изображение в мой RestController, используя MultipartFile, иногда он создает сломанное изображение (которое не открывается, а просто имеет несколько мусорных корзин внутри файла).Это происходит, когда я пытаюсь отправить (через Почтальон) изображения быстро.

Вот мой контроллер:

@PostMapping("/upload/photo")
public ResponseEntity<ServerResponse> uploadPhoto(@RequestParam MultipartFile file, HttpServletRequest httpServletRequest) {
    UserAccount userAccount = getPrincipal();
    String localAddress = "http://" + getServerUrl(httpServletRequest);      
    ServerResponse response = userAccountService.addPhoto(userAccount, file, localAddress);
    return getResponseEntity(response);
}

И мой сервис:

@Override
public ServerResponse<String> addPhoto(UserAccount userAccount, MultipartFile file, String localAddress) {
    String uploadFilePath = uploadFile(file);
    if(uploadFilePath.isEmpty()) {
        return new ServerResponse<>(ResponseStatus.BAD_REQUEST, "Please select a file to upload", "");
    }
    final String PHOTO_URL = localAddress + "/" + uploadFilePath;
    userAccount.setPhoto(PHOTO_URL);
    userAccountRepository.save(userAccount);
    return new ServerResponse<>(ResponseStatus.OK, null, PHOTO_URL);
}

private String uploadFile(MultipartFile file) {
    if (file.isEmpty()) {
        return "";
    }
    final String UPLOADED_FOLDER = "photos";
    String uniqueName = generateRandomString();
    String filePath = UPLOADED_FOLDER + "/" + uniqueName + file.getOriginalFilename();
    new File(UPLOADED_FOLDER).mkdirs();
    try {
        byte[] bytes = file.getBytes();
        Path path = Paths.get(filePath);
        if (Files.exists(path)){
            uniqueName = generateRandomString();
            filePath = UPLOADED_FOLDER + "/" + uniqueName + file.getOriginalFilename();
            path = Paths.get(filePath);
        }
        Files.write(path, bytes);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return filePath;
}

Я также пытался прочитать составной файл как InputStream, но не помог.

try (InputStream inputStream = file.getInputStream()) {
        Files.copy(inputStream, path,
                StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }    

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...