๐จ ๐
๐ ๐ช ๐ฌ ๐ ๐ ๐ฉโ๐ป โ๏ธ File.
!!! info
๐จ ๐ ๐, ๐ฅ โ python-multipart.
๐คถ โ. pip install python-multipart.
๐ โฉ๏ธ ๐ ๐ ๐จ "๐จ ๐ฝ".
๐ File
๐ File & UploadFile โช๏ธโก๏ธ fastapi:
{!../../../docs_src/request_files/tutorial001.py!}
๐ฌ File ๐ข
โ ๐ ๐ข ๐ ๐ ๐ ๐ Body โ๏ธ Form:
{!../../../docs_src/request_files/tutorial001.py!}
!!! info
File ๐ ๐ ๐ ๐ โช๏ธโก๏ธ Form.
โ๏ธ ๐ญ ๐ ๐โ ๐ ๐ Query, Path, File & ๐ โช๏ธโก๏ธ fastapi, ๐ ๐ค ๐ข ๐ ๐จ ๐ ๐.
!!! tip
๐ฃ ๐ ๐ช, ๐ ๐ช โ๏ธ File, โฉ๏ธ โช ๐ข ๐ ๐ฌ ๐ข ๐ข โ๏ธ ๐ช (๐ป) ๐ข.
๐ ๐ ๐ "๐จ ๐ฝ".
๐ฅ ๐ ๐ฃ ๐ ๐ โก ๐ ๏ธ ๐ข ๐ข bytes, FastAPI ๐ โ ๐ ๐ & ๐ ๐ ๐จ ๐ bytes.
โ๏ธ ๐คฏ ๐ ๐ โ ๐ ๐ ๐ ๐ ๐ช ๐พ. ๐ ๐ ๐ท ๐ ๐คช ๐.
โ๏ธ ๐ค ๐ ๐ผ โ ๐ ๐ช ๐ฐ โช๏ธโก๏ธ โ๏ธ UploadFile.
๐ ๐ข โฎ๏ธ UploadFile
๐ฌ ๐ ๐ข โฎ๏ธ ๐ UploadFile:
{!../../../docs_src/request_files/tutorial001.py!}
โ๏ธ UploadFile โ๏ธ ๐ ๐ ๐คญ bytes:
- ๐ ๐ซ โ๏ธ โ๏ธ
File()๐ข ๐ฒ ๐ข. - โซ๏ธ โ๏ธ "๐งต" ๐:
- ๐ ๐ช ๐พ ๐ ๐ ๐ ๐, & โฎ๏ธ ๐ถโโ๏ธ ๐ ๐ โซ๏ธ ๐ ๐ช ๐พ.
- ๐ โ ๐ โซ๏ธ ๐ ๐ท ๐ โญ ๐ ๐ ๐ผ, ๐น, โญ ๐ฑ, โ๏ธ. ๐ต ๐ฉ ๐ ๐พ.
- ๐ ๐ช ๐ค ๐ โช๏ธโก๏ธ ๐ ๐.
- โซ๏ธ โ๏ธ ๐-๐
async๐ข. - โซ๏ธ ๐ฆ โ ๐
SpooledTemporaryFile๐ ๐ ๐ ๐ช ๐ถโโ๏ธ ๐ ๐ ๐ ๐ โ ๐-๐ ๐.
UploadFile
UploadFile โ๏ธ ๐ ๐ข:
filename:strโฎ๏ธ โฎ๏ธ ๐ ๐ ๐ ๐ (โmyimage.jpg).content_type:strโฎ๏ธ ๐ ๐ (๐ ๐ / ๐ป ๐) (โimage/jpeg).file:SpooledTemporaryFile( ๐-๐ ๐). ๐ โ ๐ ๐ ๐ ๐ ๐ช ๐ถโโ๏ธ ๐ ๐ ๐ข โ๏ธ ๐ ๐ โ "๐-๐" ๐.
UploadFile โ๏ธ ๐ async ๐ฉโ๐ฌ. ๐ซ ๐ ๐ค ๐ ๐ ๐ฉโ๐ฌ ๐ (โ๏ธ ๐ SpooledTemporaryFile).
write(data): โdata(strโ๏ธbytes) ๐.read(size): โsize(int) ๐ข/๐ฆน ๐.seek(offset): ๐ถ ๐ข ๐งoffset(int) ๐.- ๐คถ โ.,
await myfile.seek(0)๐ ๐ถ โถ๏ธ ๐. - ๐ โด๏ธ โ ๐ฅ ๐ ๐
await myfile.read()๐ & โคด๏ธ ๐ช โ ๐ ๐.
- ๐คถ โ.,
close(): ๐ ๐.
๐ ๐ซ ๐ฉโ๐ฌ async ๐ฉโ๐ฌ, ๐ ๐ช "โ" ๐ซ.
๐ผ, ๐ async โก ๐ ๏ธ ๐ข ๐ ๐ช ๐ค ๐ โฎ๏ธ:
contents = await myfile.read()
๐ฅ ๐ ๐ ๐ def โก ๐ ๏ธ ๐ข, ๐ ๐ช ๐ UploadFile.file ๐, ๐ผ:
contents = myfile.file.read()
!!! note "async ๐ก โน"
๐โ ๐ โ๏ธ async ๐ฉโ๐ฌ, FastAPI ๐ ๐ ๐ฉโ๐ฌ ๐งต & โ ๐ซ.
!!! note "๐ ๐ก โน"
FastAPI'โ UploadFile ๐ ๐ โช๏ธโก๏ธ ๐'โ UploadFile, โ๏ธ ๐ฎ ๐ช ๐ โ โซ๏ธ ๐ โฎ๏ธ Pydantic & ๐ ๐ FastAPI.
โซ๏ธโ "๐จ ๐ฝ"
๐ ๐ธ ๐จ (<form></form>) ๐จ ๐ฝ ๐ฝ ๐ โ๏ธ "๐" ๐ข ๐ ๐, โซ๏ธ ๐ โช๏ธโก๏ธ ๐ป.
FastAPI ๐ โ ๐ญ โ ๐ ๐ โช๏ธโก๏ธ โถ๏ธ๏ธ ๐ฅ โฉ๏ธ ๐ป.
!!! note "๐ก โน"
๐ โช๏ธโก๏ธ ๐จ ๐ ๐ โ๏ธ "๐ป ๐" application/x-www-form-urlencoded ๐โ โซ๏ธ ๐ซ ๐ ๐.
โ๏ธ ๐โ ๐จ ๐ ๐, โซ๏ธ ๐ multipart/form-data. ๐ฅ ๐ โ๏ธ File, FastAPI ๐ ๐ญ โซ๏ธ โ๏ธ ๐ค ๐ โช๏ธโก๏ธ โ ๐ ๐ช.
๐ฅ ๐ ๐ โ ๐ ๐ ๐ ๐ข & ๐จ ๐, ๐ณ ๐ ๐ธ ๐ฉบ POST.
!!! warning
๐ ๐ช ๐ฃ ๐ File & Form ๐ข โก ๐ ๏ธ, โ๏ธ ๐ ๐ช ๐ซ ๐ฃ Body ๐ ๐ ๐ โ ๐จ ๐ป, ๐จ ๐ โ๏ธ ๐ช ๐ โ๏ธ multipart/form-data โฉ๏ธ application/json.
๐ ๐ซ ๐ซ FastAPI, โซ๏ธ ๐ ๐บ๐ธ๐ ๐ ๏ธ.
๐ฆ ๐ ๐
๐ ๐ช โ ๐ ๐ฆ โ๏ธ ๐ฉ ๐ โ & โ ๐ข ๐ฒ None:
=== "๐ 3๏ธโฃ.6๏ธโฃ & ๐"
{!> ../../../docs_src/request_files/tutorial001_02.py!}
=== "๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ & ๐"
{!> ../../../docs_src/request_files/tutorial001_02_py310.py!}
UploadFile โฎ๏ธ ๐ ๐
๐ ๐ช โ๏ธ File() โฎ๏ธ UploadFile, ๐ผ, โ ๐ ๐:
{!../../../docs_src/request_files/tutorial001_03.py!}
๐ ๐ ๐
โซ๏ธ ๐ช ๐ ๐ ๐ ๐ ๐ฐ.
๐ซ ๐ ๐จโ๐ผ ๐ "๐จ ๐" ๐จ โ๏ธ "๐จ ๐ฝ".
โ๏ธ ๐, ๐ฃ ๐ bytes โ๏ธ UploadFile:
=== "๐ 3๏ธโฃ.6๏ธโฃ & ๐"
{!> ../../../docs_src/request_files/tutorial002.py!}
=== "๐ 3๏ธโฃ.9๏ธโฃ & ๐"
{!> ../../../docs_src/request_files/tutorial002_py39.py!}
๐ ๐ ๐จ, ๐ฃ, list bytes โ๏ธ UploadFileโ.
!!! note "๐ก โน"
๐ ๐ช โ๏ธ from starlette.responses import HTMLResponse.
FastAPI ๐ ๐ starlette.responses fastapi.responses ๐ช ๐, ๐ฉโ๐ป. โ๏ธ ๐
๐ช ๐จ ๐ ๐ โช๏ธโก๏ธ ๐.
๐ ๐ ๐ โฎ๏ธ ๐ ๐
& ๐ ๐ โญ, ๐ ๐ช โ๏ธ File() โ ๐ ๐ข, UploadFile:
=== "๐ 3๏ธโฃ.6๏ธโฃ & ๐"
{!> ../../../docs_src/request_files/tutorial003.py!}
=== "๐ 3๏ธโฃ.9๏ธโฃ & ๐"
{!> ../../../docs_src/request_files/tutorial003_py39.py!}
๐
โ๏ธ File, bytes, & UploadFile ๐ฃ ๐ ๐ ๐จ, ๐จ ๐จ ๐ฝ.