Я разработал систему с микросервисной архитектурой с каркасом с пружинной загрузкой (1.5.9), я использовал zuul и tape в схеме шлюза.
Для загрузки больших файлов я отключил многочастную загрузку, как показано ниже:
application.yml
spring:
http:
multipart:
enabled: false
max-request-size: -1
max-file-size: -1
Насколько мне известно, из-за того, что 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
Как объяснено в весеннем документе, нам нужно добавить префикс zuul к URL, чтобы обойти фильтр zuul, и я сделал это.
Но это работает только для маленьких файлов. Когда я пытаюсь загрузить большие файлы, FileItemIterator
пусто iterator
.
Я все проверил и через 2 дня не смог решить проблему!