2016-09-28 3 views
1

Я работаю с Spring Boot 1.2.5, и я хотел бы загрузить необработанный двоичный файл в контроллер. Размер файла может быть большим, поэтому я не хочу хранить весь запрос в памяти, но вместо этого передам файл, ведь файл генерируется при запуске передачи, поэтому клиент даже не знает размер файла. Я вижу пример того, как сделать что-то подобное с загрузкой файла с многостраничным кодированием here. Тем не менее, я не хочу многостраничную кодированную загрузку, просто сырой поток байтов. Я не могу найти способ справиться с этим вариантом использования весной.Весенняя загрузка не многостраничного файла в виде потока

ответ

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")); 
} 
+0

Просто, чтобы быть ясным, этот обработчик вызывается во время загрузки. Значит, данные не хранятся во временном файле, и весь файл еще не находится в памяти во время вызова, правильно? – cmaynard

+0

@cmaynard Метод вводится после обработки заголовка запроса. Затем вы получаете поток тела запроса. Возможно, у вас может быть фильтр сервлета, который использует что-то вроде «TeeInputStream», чтобы сохранить свой собственный буфер тела запроса, но в проекте Spring-mvc по умолчанию для Spring-mvc у вас не должно быть ничего подобного. – Magnus