Я работаю с Spring Boot 1.2.5, и я хотел бы загрузить необработанный двоичный файл в контроллер. Размер файла может быть большим, поэтому я не хочу хранить весь запрос в памяти, но вместо этого передам файл, ведь файл генерируется при запуске передачи, поэтому клиент даже не знает размер файла. Я вижу пример того, как сделать что-то подобное с загрузкой файла с многостраничным кодированием here. Тем не менее, я не хочу многостраничную кодированную загрузку, просто сырой поток байтов. Я не могу найти способ справиться с этим вариантом использования весной.Весенняя загрузка не многостраничного файла в виде потока
1
A
ответ
1
Вы можете просто использовать входной поток HttpServletRequest
.
Просто имейте в виду, что если у вас есть фильтры, которые предварительно обрабатывают запрос и потребляют входной поток, это может не сработать.
@ResponseBody
@RequestMapping(path="fileupload", method = RequestMethod.POST, consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void fileUpload(HttpServletRequest request) throws IOException {
Files.copy(request.getInputStream(), Paths.get("myfilename"));
}
Просто, чтобы быть ясным, этот обработчик вызывается во время загрузки. Значит, данные не хранятся во временном файле, и весь файл еще не находится в памяти во время вызова, правильно? – cmaynard
@cmaynard Метод вводится после обработки заголовка запроса. Затем вы получаете поток тела запроса. Возможно, у вас может быть фильтр сервлета, который использует что-то вроде «TeeInputStream», чтобы сохранить свой собственный буфер тела запроса, но в проекте Spring-mvc по умолчанию для Spring-mvc у вас не должно быть ничего подобного. – Magnus