Похоже, что Tomcat не обрабатывает параллельные загрузки одного и того же составного файла двумя разными пользователями.
Тест
- Две сессии / пользователи A & B
- Оба загружают файл размером 20 МБ с тем же именем
foo.pdf
более или менее одновременно - Запрос сервлета 3.0 с конфигурацией по умолчанию сохраняет два файла в tmpпапка
- Оба потока пытаются записать
foo.pdf
в папку tmp
Результат
- Загруженный документ поврежден(два потока записывают в него)
- Более медленный запрос завершится ошибкой с
FileNotFoundException
, поскольку файл tmp уже был удален задачей очистки более быстрого запроса.
Есть лиспособ избежать этого - кроме установки fileSizeThreshold
выше, чем maxFileSize
, чтобы он никогда не записывался на диск.
Примечание: это приложение Spring Boot 2.1, но это не имеет значенияпоскольку он использует эту реализацию Servlet 3.0 по умолчанию.