этом там есть сносочка: For large uploads you can save the contents of the field to the file system using the NamedTempFile crate
Насколько я посмотрел - NamedTempFile это структура из крейта tempfile, а tempfile в свою очередь сохраняет файл в директории std::env::temp_dir()
собственно, вопрос: а чем это лучше, чем просто в память загружать? на Linux /tmp это же рамдиск(tmpfs), или я чего-то не понимаю и все в реальности сложнее?
у нас был случай когда /tmp был примонтирован на нжмд, но в целом верно
Памяти может не хватить. А тмп это не всегда оперативки
А разве нельзя качать файл напрямую туда, где он понадобится? Зачем промежуточный этап с тмп
firefox обычно так и делает, только добавляет к имени part, а потом переменует
Перед отправкой на постоянное хранилище там файл можно проверить на магические числа, на вирусы или устроить какие-то свои проверки ( многие парсят пдф-файлы, например, самописными парсерами в поисках всякой вшитой левой хрени ).
Заливка больших файлов в S3 через промежуточный TMP файл - так себе вариант. Сначала клиент будет N секунд заливать файл на твой сервер, а потом примерно столько же ждать ответа от сервера, пока сервер заливает файл в S3. Тут либо делать на сервере заливку в S3 налету, из запроса клиента. Или после сохранения в TMP запускать фоновую задачу по заливке в S3 и сразу же возвращать клиенту ответ. Но тут есть минусы: - фоновая задачка может умереть не успев залить файл - надо что-то придумывать если залитый файл сразу же будет нужен клиенту после заливки, а он всё ещё в TMP.
Обсуждают сегодня