# ๐จ ๐ ๐ ๐ช ๐ฌ ๐ ๐ ๐ฉโ๐ป โ๏ธ `File`. /// info ๐จ ๐ ๐, ๐ฅ โ `python-multipart`. ๐คถ โ. `pip install python-multipart`. ๐ โฉ๏ธ ๐ ๐ ๐จ "๐จ ๐ฝ". /// ## ๐ `File` ๐ `File` & `UploadFile` โช๏ธโก๏ธ `fastapi`: {* ../../docs_src/request_files/tutorial001.py hl[1] *} ## ๐ฌ `File` ๐ข โ ๐ ๐ข ๐ ๐ ๐ ๐ `Body` โ๏ธ `Form`: {* ../../docs_src/request_files/tutorial001.py hl[7] *} /// info `File` ๐ ๐ ๐ ๐ โช๏ธโก๏ธ `Form`. โ๏ธ ๐ญ ๐ ๐โ ๐ ๐ `Query`, `Path`, `File` & ๐ โช๏ธโก๏ธ `fastapi`, ๐ ๐ค ๐ข ๐ ๐จ ๐ ๐. /// /// tip ๐ฃ ๐ ๐ช, ๐ ๐ช โ๏ธ `File`, โฉ๏ธ โช ๐ข ๐ ๐ฌ ๐ข ๐ข โ๏ธ ๐ช (๐ป) ๐ข. /// ๐ ๐ ๐ "๐จ ๐ฝ". ๐ฅ ๐ ๐ฃ ๐ ๐ *โก ๐ ๏ธ ๐ข* ๐ข `bytes`, **FastAPI** ๐ โ ๐ ๐ & ๐ ๐ ๐จ ๐ `bytes`. โ๏ธ ๐คฏ ๐ ๐ โ ๐ ๐ ๐ ๐ ๐ช ๐พ. ๐ ๐ ๐ท ๐ ๐คช ๐. โ๏ธ ๐ค ๐ ๐ผ โ ๐ ๐ช ๐ฐ โช๏ธโก๏ธ โ๏ธ `UploadFile`. ## ๐ ๐ข โฎ๏ธ `UploadFile` ๐ฌ ๐ ๐ข โฎ๏ธ ๐ `UploadFile`: {* ../../docs_src/request_files/tutorial001.py hl[12] *} โ๏ธ `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` *โก ๐ ๏ธ ๐ข* ๐ ๐ช ๐ค ๐ โฎ๏ธ: ```Python contents = await myfile.read() ``` ๐ฅ ๐ ๐ ๐ `def` *โก ๐ ๏ธ ๐ข*, ๐ ๐ช ๐ `UploadFile.file` ๐, ๐ผ: ```Python contents = myfile.file.read() ``` /// note | `async` ๐ก โน ๐โ ๐ โ๏ธ `async` ๐ฉโ๐ฌ, **FastAPI** ๐ ๐ ๐ฉโ๐ฌ ๐งต & โ ๐ซ. /// /// note | ๐ ๐ก โน **FastAPI**'โ `UploadFile` ๐ ๐ โช๏ธโก๏ธ **๐**'โ `UploadFile`, โ๏ธ ๐ฎ ๐ช ๐ โ โซ๏ธ ๐ โฎ๏ธ **Pydantic** & ๐ ๐ FastAPI. /// ## โซ๏ธโ "๐จ ๐ฝ" ๐ ๐ธ ๐จ (`
`) ๐จ ๐ฝ ๐ฝ ๐ โ๏ธ "๐" ๐ข ๐ ๐, โซ๏ธ ๐ โช๏ธโก๏ธ ๐ป. **FastAPI** ๐ โ ๐ญ โ ๐ ๐ โช๏ธโก๏ธ โถ๏ธ๏ธ ๐ฅ โฉ๏ธ ๐ป. /// note | ๐ก โน ๐ โช๏ธโก๏ธ ๐จ ๐ ๐ โ๏ธ "๐ป ๐" `application/x-www-form-urlencoded` ๐โ โซ๏ธ ๐ซ ๐ ๐. โ๏ธ ๐โ ๐จ ๐ ๐, โซ๏ธ ๐ `multipart/form-data`. ๐ฅ ๐ โ๏ธ `File`, **FastAPI** ๐ ๐ญ โซ๏ธ โ๏ธ ๐ค ๐ โช๏ธโก๏ธ โ ๐ ๐ช. ๐ฅ ๐ ๐ โ ๐ ๐ ๐ ๐ข & ๐จ ๐, ๐ณ ๐ ๐ธ ๐ฉบPOST
.
///
/// warning
๐ ๐ช ๐ฃ ๐ `File` & `Form` ๐ข *โก ๐ ๏ธ*, โ๏ธ ๐ ๐ช ๐ซ ๐ฃ `Body` ๐ ๐ ๐ โ ๐จ ๐ป, ๐จ ๐ โ๏ธ ๐ช ๐ โ๏ธ `multipart/form-data` โฉ๏ธ `application/json`.
๐ ๐ซ ๐ซ **FastAPI**, โซ๏ธ ๐ ๐บ๐ธ๐ ๐ ๏ธ.
///
## ๐ฆ ๐ ๐
๐ ๐ช โ ๐ ๐ฆ โ๏ธ ๐ฉ ๐ โ & โ ๐ข ๐ฒ `None`:
{* ../../docs_src/request_files/tutorial001_02.py hl[9,17] *}
## `UploadFile` โฎ๏ธ ๐ ๐
๐ ๐ช โ๏ธ `File()` โฎ๏ธ `UploadFile`, ๐ผ, โ ๐ ๐:
{* ../../docs_src/request_files/tutorial001_03.py hl[13] *}
## ๐ ๐ ๐
โซ๏ธ ๐ช ๐ ๐ ๐ ๐ ๐ฐ.
๐ซ ๐ ๐จโ๐ผ ๐ "๐จ ๐" ๐จ โ๏ธ "๐จ ๐ฝ".
โ๏ธ ๐, ๐ฃ ๐ `bytes` โ๏ธ `UploadFile`:
{* ../../docs_src/request_files/tutorial002.py hl[10,15] *}
๐ ๐ ๐จ, ๐ฃ, `list` `bytes` โ๏ธ `UploadFile`โ.
/// note | ๐ก โน
๐ ๐ช โ๏ธ `from starlette.responses import HTMLResponse`.
**FastAPI** ๐ ๐ `starlette.responses` `fastapi.responses` ๐ช ๐, ๐ฉโ๐ป. โ๏ธ ๐
๐ช ๐จ ๐ ๐ โช๏ธโก๏ธ ๐.
///
### ๐ ๐ ๐ โฎ๏ธ ๐ ๐
& ๐ ๐ โญ, ๐ ๐ช โ๏ธ `File()` โ ๐ ๐ข, `UploadFile`:
{* ../../docs_src/request_files/tutorial003.py hl[18] *}
## ๐
โ๏ธ `File`, `bytes`, & `UploadFile` ๐ฃ ๐ ๐ ๐จ, ๐จ ๐จ ๐ฝ.