在付费表单上接受图片上传
文件问题在付费方案上接受 JPEG、PNG、WebP 和 GIF,即使关闭严格模式也会检查。声明它、让文件数量由表单的设置限定,并说明私有存储与签名链接。
本文由机器翻译。 阅读英文原文

文件(File)问题是表单中唯一接受字节而不是文本的部分。在付费方案上,它接受光栅图片:JPEG、PNG、WebP 和 GIF。本教程会声明该字段、限定它的范围,并说明提交者按下发送之后文件会怎样。全文都停留在图片这一边界内,因为这就是该功能所记录的边界。
文件问题接受什么
格式列表是一份允许清单,不是提示。没有指定任何格式时,文件问题接受上面四种光栅图片。SVG 被刻意排除:SVG 是渲染成图片的脚本,把它送回收件箱会让表单变成脚本宿主。这个字段也不是堆放压缩包的地方——没有 ZIP,没有打包文件。没有文件问题的表单会直接拒绝所有 multipart 上传,因此这个字段也是打开上传的开关。
JPEG——照片和手机相机输出。
PNG——截图和带透明度的图像。
WebP——同样画面的更少字节。
GIF——短循环和简单图形。
声明字段,然后限定它
添加问题,把类型选为文件(File),并把接受的格式保留为这四种图片。然后设定该问题接受多少个文件。这个设置属于问题本身,因此同一个表单可以只要求一张头像,也可以在下面要求多张截图。
设置 | 选择什么 | 为什么重要 |
|---|---|---|
类型 | 文件(File) | 声明该字段,这正是它在接收时具有决定权的原因。 |
接受的格式 | JPEG、PNG、WebP、GIF | 列表之外的内容会被拒绝,而不是被转换。 |
最大文件数 | 由表单决定 | 文件数量由表单的设置限定。 |
必填 | 开启或关闭 | 必填会把空上传变成一次拒绝。 |
即使关闭严格模式也具有决定权
严格模式是每个表单自己的决定。关闭时模式只提供建议;开启时模式说了算。文件问题不等这个决定。已声明的文件问题会在每次提交时检查——大小、类型和内容——而且是拒绝,不是裁剪。这是有意的:文件是唯一既占存储又可能携带代码的答案。
所以即使表单很宽松,错误的文件也会被拒绝。提交者会得到提示,这次尝试会保存为可查看的被拒绝提交。该表单的其他字段都可以保持建议性质;文件不行。
文件去哪里,谁能打开
上传的文件是提交内容的一部分,不是公开资源。它以私有方式存储,并通过会过期的签名链接读取。没有可猜的公开地址,复制一个链接也不等于得到一扇永远开着的门。
用真实文件检查一次
用手机拍的 JPEG 提交一次,用 PNG 截图提交一次,再用一个不在列表里的文件提交一次。前两个应当随提交一起到达;第三个应当带着原因被拒绝。这五分钟能抓住常见错误:没有人勾选必填的字段、页面要三张照片而数量还留在一,或者标签承诺了字段并不接受的格式。
然后从提交记录里打开一张已存储的图片。如果登录状态下签名链接可用,而同一个文件在普通公开地址上打不开,存储就是按文档工作的。
该对填写表单的人说什么
在标签里写清格式和数量,而不只是“上传”两个字:“最多三张照片(JPEG、PNG、WebP 或 GIF)”。提交者在选择文件之前先读标签,正确的提示胜过事后的拒绝。
也要说明文件会怎样。交出照片的人有权知道它被私有存储、通过链接打开,而不会发布在页面上。
multipart 提交的请求形状(包括文件部分)见 API 参考。上传随第一个版本到来——更新日志中的 v1.0.0把它与导出和答案摘要列在一起。