У меня есть метод, который принимает файл в форме InputStream
и возвращает это InputStream
обратно пользователю.Когда пользователь сохраняет видеофайл обратно с InputStream
, видеофайл не может быть воспроизведен.Метод, который получает и возвращает файл, выглядит следующим образом:
@RequestMapping(value = "/file_redirect", method = RequestMethod.POST)
public ResponseEntity fileRedirect(HttpServletRequest request) throws Exception{
InputStreamResource inputStreamResource = new InputStreamResource(request.getInputStream());
return new ResponseEntity(inputStreamResource, HttpStatus.OK);
}
Я использую curl
для отправки запроса и получения файла:
curl -X POST -H "content-length: 389907412" -H "Content-Type: multipart/form-data" -F "data=@/path/to/file/myVideo.mp4" -o returnedVideo.mp4 localhost/file_redirect
Я также пробовал этометод (размер файла правильный):
@RequestMapping(value = "/file_redirect", method = RequestMethod.POST)
public ResponseEntity fileRedirect(HttpServletRequest request) throws Exception{
InputStreamResource inputStreamResource = new InputStreamResource(request.getInputStream());
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentLength(389907412);
httpHeaders.setContentType(new MediaType("video", "mp4"));
return new ResponseEntity(inputStreamResource, httpHeaders, HttpStatus.OK);
}
Оба метода «работают» и файл успешно сохранен, но после этого его невозможно воспроизвести.Размер возвращаемого файла правильный.Метаданные возвращенного файла утеряны.Тип файла как для исходного, так и для возвращаемого файла: MPEG-4 video (video/mp4)
.Контрольные суммы исходного файла и возвращаемого файла различны.
Что я делаю не так при сохранении файла?Почему метаданные теряются в возвращаемом файле?