diff --git a/docs/zh/docs/tutorial/request-files.md b/docs/zh/docs/tutorial/request-files.md
index 25657d93b..e18d6fc9f 100644
--- a/docs/zh/docs/tutorial/request-files.md
+++ b/docs/zh/docs/tutorial/request-files.md
@@ -44,9 +44,9 @@
不过,很多情况下,`UploadFile` 更好用。
-## 含 `UploadFile` 的 `File` 参数
+## 含 `UploadFile` 的文件参数
-定义 `File` 参数时使用 `UploadFile`:
+定义文件参数时使用 `UploadFile`:
```Python hl_lines="12"
{!../../../docs_src/request_files/tutorial001.py!}
@@ -94,7 +94,7 @@ contents = myfile.file.read()
!!! note "`async` 技术细节"
- 使用 `async` 方法时,**FastAPI** 在线程池中执行文件方法,并 `awiat` 操作完成。
+ 使用 `async` 方法时,**FastAPI** 在线程池中执行文件方法,并 `await` 操作完成。
!!! note "Starlette 技术细节"
@@ -120,6 +120,30 @@ contents = myfile.file.read()
这不是 **FastAPI** 的问题,而是 HTTP 协议的规定。
+## 可选文件上传
+
+您可以通过使用标准类型注解并将 None 作为默认值的方式将一个文件参数设为可选:
+
+=== "Python 3.6 及以上版本"
+
+ ```Python hl_lines="9 17"
+ {!> ../../../docs_src/request_files/tutorial001_02.py!}
+ ```
+
+=== "Python 3.9 及以上版本"
+
+ ```Python hl_lines="7 14"
+ {!> ../../../docs_src/request_files/tutorial001_02_py310.py!}
+ ```
+
+## 带有额外元数据的 `UploadFile`
+
+您也可以将 `File()` 与 `UploadFile` 一起使用,例如,设置额外的元数据:
+
+```Python hl_lines="13"
+{!../../../docs_src/request_files/tutorial001_03.py!}
+```
+
## 多文件上传
FastAPI 支持同时上传多个文件。
@@ -128,19 +152,20 @@ FastAPI 支持同时上传多个文件。
上传多个文件时,要声明含 `bytes` 或 `UploadFile` 的列表(`List`):
-```Python hl_lines="10 15"
-{!../../../docs_src/request_files/tutorial002.py!}
-```
+=== "Python 3.6 及以上版本"
-接收的也是含 `bytes` 或 `UploadFile` 的列表(`list`)。
+ ```Python hl_lines="10 15"
+ {!> ../../../docs_src/request_files/tutorial002.py!}
+ ```
-!!! note "笔记"
+=== "Python 3.9 及以上版本"
- 注意,截至 2019 年 4 月 14 日,Swagger UI 不支持在同一个表单字段中上传多个文件。详见 #4276 和 #3641.
+ ```Python hl_lines="8 13"
+ {!> ../../../docs_src/request_files/tutorial002_py39.py!}
+ ```
- 不过,**FastAPI** 已通过 OpenAPI 标准与之兼容。
+接收的也是含 `bytes` 或 `UploadFile` 的列表(`list`)。
- 因此,只要 Swagger UI 或任何其他支持 OpenAPI 的工具支持多文件上传,都将与 **FastAPI** 兼容。
!!! note "技术细节"
@@ -148,6 +173,22 @@ FastAPI 支持同时上传多个文件。
`fastapi.responses` 其实与 `starlette.responses` 相同,只是为了方便开发者调用。实际上,大多数 **FastAPI** 的响应都直接从 Starlette 调用。
+### 带有额外元数据的多文件上传
+
+和之前的方式一样, 您可以为 `File()` 设置额外参数, 即使是 `UploadFile`:
+
+=== "Python 3.6 及以上版本"
+
+ ```Python hl_lines="18"
+ {!> ../../../docs_src/request_files/tutorial003.py!}
+ ```
+
+=== "Python 3.9 及以上版本"
+
+ ```Python hl_lines="16"
+ {!> ../../../docs_src/request_files/tutorial003_py39.py!}
+ ```
+
## 小结
本节介绍了如何用 `File` 把上传文件声明为(表单数据的)输入参数。