跳到主要内容
FormFlow

在付费表单上接受图片上传

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

本文由机器翻译。 阅读英文原文

A dark FormFlow plate showing a declared image field kept authoritative at ingestion even when Strict mode is off.

文件(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把它与导出和答案摘要列在一起。