流水线
流水线按顺序执行处理插件。先选择处理阶段,再添加步骤;插件与流水线的关系见 理解 Picloom。
选择处理阶段
| 阶段 | 执行时机 | 对图片的影响 | 作用范围与用途 |
|---|---|---|---|
| 上传 | 写入副本前 | 处理结果作为图片保存 | 使用该流水线的上传配置;适合统一缩放、添加水印 |
| 访问 | 读取公开图片时 | 只改变访问结果,不覆盖存储图片 | 全局,包括已有图片;适合按链接参数生成缩略图 |
| 保存后 | 图片发布后,后台执行 | 不改写图片内容,可屏蔽或删除图片 | 使用该流水线的上传配置;适合审核、通知 |
保存后审核可能在图片已经可访问后才完成,不能保证“审核通过后才首次公开”。
配置并启用
首次部署不启用任何处理步骤,默认上传配置的上传和保存后流水线均为空。
上传与保存后:
- 打开 配置 → 流水线,创建对应阶段的流水线并命名。
- 添加处理步骤,填写配置并保存。
- 打开 配置 → 上传配置,编辑需要使用它的配置,在对应流水线字段中选择并保存。
访问: 打开 配置 → 流水线,编辑全局访问流水线,添加步骤并保存。无需绑定上传配置。
添加和排列步骤
每个步骤使用一个处理插件,有独立配置;可选插件取决于其支持的阶段。步骤从前到后执行,前一步的图片处理结果交给后一步。
例如,上传流水线按“图片缩放 → 水印”排列,会先缩小图片,再按缩小后的尺寸加水印。交换顺序会连同水印一起缩小。
保存后流水线累计采用最严格的处置:删除优先于屏蔽,屏蔽优先于通过;复核步骤可明确覆盖。前一步提出屏蔽或删除后,后续步骤仍会执行,处置在本次执行结束时应用。后续步骤失败不会丢失已有的屏蔽或删除决定。
固定配置与请求参数
同一个处理步骤,有时需要对所有图片使用统一规则,有时需要让每次上传或访问选择不同的处理方式。因此,步骤中区分两类设置:
| 设置 | 谁来填写 | 作用 |
|---|---|---|
| 固定配置 | 管理员在编辑步骤时填写并保存 | 作为这个步骤的长期配置 |
| 请求参数 | 上传者随上传请求提交,或访问者加在图片链接中 | 只对这一次请求生效,不修改已保存的步骤配置 |
请求参数需要管理员在步骤中逐项启用,才能传给插件。 启用参数只是允许请求方传值,并不是给它设置一个固定值。
例如,在上传流水线中添加 图片处理,将固定配置的宽度设为 1600。其中,请求参数 w 也表示宽度:
步骤是否启用 w | 本次上传是否传入 w | 实际使用的宽度 |
|---|---|---|
| 否 | 不传,或传入任意值 | 1600,请求中的 w 被忽略 |
| 是 | 不传 | 1600,沿用固定配置 |
| 是 | 传入 800 | 800,本次覆盖固定配置 |
上传时,请求参数放在上传 API 的 params 字段中。例如,使用 POST /api/files 上传图片时,在同一个 multipart/form-data 请求中提交:
| 字段 | 示例值 |
|---|---|
profileId | 上传配置的 ID |
file | 图片文件 |
params | {"w":800},以 JSON 字符串填写 |
w 需要在该上传配置所用的图片处理步骤中启用;仅在 params 中填写,不会自动启用它。上述宽度是缩放目标,传入的值需通过类型、数值和资源限制校验。
访问时则把参数放在公开链接后,例如 ?w=320。要使它生效,需在全局访问流水线的图片处理步骤中启用 w;上传步骤启用的参数不会自动开放给访问步骤。图片处理插件在访问阶段不提供固定宽高,未传缩放或格式等处理参数时不做处理。
以上覆盖规则是图片处理插件的行为,其他插件以各自说明为准。请求参数按步骤启用;多个步骤启用同名参数时会各自收到该值,保存后步骤不接受请求参数。传值方式见 HTTP API,访问参数见 图片处理插件。
不适用与执行失败
上传和访问步骤可以设置“不适用”时的行为。例如,使用图片处理插件缩放 GIF 或 SVG 时,会判为不适用。
| 选择 | 行为 | 适用需求 |
|---|---|---|
| 跳过 | 保留当前图片,继续下一步 | 允许不支持的图片保持原样 |
| 中止 | 终止本次上传或访问并报错 | 必须完成该处理,例如不能漏加水印 |
这个选项不处理网络错误、无效参数等执行异常。执行失败的影响取决于阶段:
- 上传: 本次上传失败,不发布图片。
- 访问: 本次访问失败,存储图片不变。
- 保存后: 记录后台任务错误并保留已完成步骤的结果。已有屏蔽或删除决定会生效,任务不再自动重试;否则,可重试的错误在次数限制内自动重试。结果可在图片详情中查看。
修改后何时生效
- 上传和保存后流水线可被多个上传配置共用,修改会影响所有引用它的配置。
- 上传流水线只处理后续上传。删除水印步骤不会移除已保存图片中的水印。
- 全局访问流水线影响后续公开访问,包括已有图片;客户端已缓存的内容仍可能显示旧结果。
- 保存后流水线不会自动重跑已完成的任务;排队或重试的任务执行时会读取当前步骤。