Я использую Spring Boot в качестве серверной части для обработки загрузок с помощью FilePond. Если ошибок не возникает, загрузка чанка работает нормально со следующей конечной точкой PATCH:
** Code omitted for brevity **
File file = new File(PATH + "/" + patch + extension);
OutputStream out = new FileOutputStream(file, true);
try {
// if(file.length() > 600000 && !patched)
// return ResponseEntity.badRequest().body("Failed");
out.write(input);
} catch (Exception e){
e.printStackTrace();
return ResponseEntity.unprocessableEntity().body("Could not write file");
}finally {
out.close();
}
out.close();
** Code omitted for brevity **
Если я раскомментирую оператор if в блоке try, в конечном итоге произойдет ошибка, как я и тестирую Возможности повтора:
@RequestMapping(method = RequestMethod.HEAD)
public ResponseEntity<String> resume(@RequestParam("patch") String fileName, HttpServletRequest req){
File file = new File(PATH + "/" + fileName + ".jpg");
patched = true;
HttpHeaders header = new HttpHeaders();
header.set("Upload-Offset", Long.toString(file.length()));
return ResponseEntity.ok().headers(header).body("success");
}
Как вы можете видеть, я отправляю ответ с заголовком «Upload-Offset» и длиной файла до сих пор (что является смещением, где нам нужно начинать заново). Я также пробовал это с заголовком HttpServletResponse с тем же результатом. Когда я повторяю загрузку, заголовок «Upload-Offset» начинается с нуля. Куски все еще проходят, и длина файла, кажется, увеличивается на основе оператора регистрации, который я пропустил. Однако окончательное изображение всегда заканчивается частично завершенным.
Почему заголовок смещения при загрузке не начинается там, где он должен (610000), и почему данные записываются в файл изображения, но не отображаются как данные изображения?