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