Я разработал систему с микросервисной архитектурой с фреймворком spring boot (1.5.9), я использовал zuul и ленту в шаблоне шлюза. Чтобы загружать большие файлы, я отключил многокомпонентную загрузку, как показано ниже:
application.yml
spring:
http:
multipart:
enabled: false
max-request-size: -1
max-file-size: -1
Насколько я знаю, из-за того, что spring не позволяет обрабатывать составной запрос, мы должны отключить преобразователь составных запросов Spring.
На следующем шаге я увеличил время ожидания ленты и время ожидания zuul:
gateway.yml
ribbon: #LoadBalancer
ReadTimeout: 20000
ConnectTimeout: 20000
zuul: #Gatway Proxy
ignoredServices: '*'
set-content-length: true
#prefix: /api
host:
connect-timeout-millis: 20000
socket-timeout-millis: 20000
Код загрузчика выглядит следующим образом:
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
factory.setSizeThreshold(0);
factory.setFileCleaningTracker(null);
//Create a new file upload handler
ServletFileUpload uploader = new ServletFileUpload(new DiskFileItemFactory());
//Parse the request
FileItemIterator iter = uploader.getItemIterator(httpServletRequest);
while (iter.hasNext())
{
...
}
Я использую приведенный ниже URL для загрузки файлов:
example.com/zuul/serviceName/upload
Как объяснялось в документе spring, нам нужно добавить префикс zuul к URL-адресу, чтобы обойти фильтр zuul, и я это сделал.
Но это работает только для небольших файлов. Когда я пытаюсь загрузить большие файлы, FileItemIterator
пусто iterator
.
Я все протестировал и по прошествии 2 дней не смог решить проблему!