В одном из моих контроллеров Spring Boot я получаю закачки файлов (до 500 МБ) следующим образом:
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
if (item.isFormField()) {
} else {
try (InputStream in = item.openStream(); OutputStream out = new FileOutputStream("path-to-file")) {
IOUtils.copy(in, out);
}
}
}
Файл сохраняется в локальной файловой системе Ubuntu 18.04 и работает хорошо .
Проблема в том, что скорость загрузки смехотворно низкая, в среднем менее 2 МБ / с. Кроме того, загрузка процессора составляет около 20% во время загрузки.
Когда я копирую файл с scp в тот же ящик, я максимально увеличиваю при загрузке моего inte rnet соединения 50 Мбит.
Почему загрузка этого файла такая медленная?
На самом деле я не вижу улучшения скорости по сравнению с моей первоначальной реализацией, использующей механизм загрузки на основе MultipartFile в Spring (за исключением того, что я больше не получаю ошибки и ошибки OOM с тех пор, как перешел на commons-fileupload
)