运营传了 webp 截图,接口回 400 unsupported image format,控制台里写的是支持 jpg png bmp pdf。乍看像缓存或者权限的锅,追下去往往不是。
from PIL import Image
im = Image.open('shot.webp').convert('RGB')
im.save('shot.jpg', quality=92)
print(im.format)
追下去是这么回事:识别服务对输入格式有白名单,webp 和 avif 都不在列表里。前端截图工具默认存 webp,用户不知道要转格式。
「识别图片格式支持」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,上传前统一转成 png 或 jpg;后端按文件头判断真实格式 不听扩展名;不支持的格式在入口给出明确提示;保留原图 便于换格式重试。
验收就看一点,webp 截图也能正常识别 入口不再出现 400。
