Комментарии 8
А про самое интересное и ничего не сказано: тема async не раскрыта (у нас же async фреймворк), про возможные проблемы, если я буду раздавать файл 1G, он будет весь в память загружен или частями, нет ничего про насколько это проигрывает или выигрывает, если сравнивать с раздачей файлов через тот же nginx.
И последний параметр, который я использовал, это
media_type
, он указывает на MIME-тип, в данном случаеmultipart/form-data
, указывающий, что мы ожидаем набор данных из HTML-формы.
ох, только сейчас заметил, у ответа media_type это про тип файла, в данном случае это application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Ну это же даже меньше чем в родной справке примеров!
Сеньор программист выше очень правильно заметил про async, и размер файла, и про mime-type. Хватит уже бояться StreamingResponse - очень просто и удобно реализуется, разгружает память, процессор, сеть и прокси.
Указывая правильный MIME-тип в ответе вы подсказываете браузеру и ОС чем можно сразу открыть файл.
Я думаю как вариант тут хорошо все написанно https://stackoverflow.com/questions/73671611/how-to-stream-html-content-with-static-files-using-fastapi/73672334#73672334 по поводу StreamingResponse
Хотя конечно хотелось бы узнать и за это еще - " если я буду раздавать файл 1G, он будет весь в память загружен или частями, нет ничего про насколько это проигрывает или выигрывает, если сравнивать с раздачей файлов через тот же nginx. "
Для высоконагруженных сервисов мы делали передачу через S3: когда скачиваем - просто передаем через API подписанный URL, который экспайрится через 5 минут. А когда закачка, то клиенту тоже даем подписанный URL для закачки https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html. Это все интересно, когда файлы большие, а когда маленькие, то да - проще пихать через API.
В чем смысл статьи? пересказ документации? или у FastApi нет документации? или описан очень пограничный кейс, с которым редко сталкиваешься?
Здравствуйте, статья написана с той целью, чтоб пользоваться ей сразу же после прочтения.
Соглашусь, что всё это есть в хорошей документации, но далеко не всегда нужно всё, что там дано, поэтому я сделал выжимку, без подробностей, так как в таком типе статей они не совсем уместны.
Спасибо за обратную связь! :)
Самое интересное это асинхронная передача файлов в стримах, санками. А таким образом только какие-то маленькие файлики можно передавать или для совсем небольшой нагрузки использовать.
Как отправить и скачать файл в FastAPI