Skip to content

fix(api): 统一图片上传限制并转换 TIFF 为 PNG#210

Merged
ThaddeusJiang merged 2 commits into
mainfrom
fix/api-image-upload-tiff-png
Jun 8, 2026
Merged

fix(api): 统一图片上传限制并转换 TIFF 为 PNG#210
ThaddeusJiang merged 2 commits into
mainfrom
fix/api-image-upload-tiff-png

Conversation

@ThaddeusJiang

@ThaddeusJiang ThaddeusJiang commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • 将 API 图片上传大小限制统一到 :image_upload_max_file_size 配置,默认 50MB,并支持 IMAGE_UPLOAD_MAX_FILE_SIZE 覆盖。
  • 只为 multipart 上传扩展 parser limit,并让超限请求返回标准 JSON 413
  • 为 API 添加请求/响应摘要日志,不记录 token 或文件内容。
  • 支持 TIFF 上传,并在进入 storage 前通过 ImageUpload.store/3 转换为 PNG,保证详情页和缩略图能在浏览器显示。
  • 保持 ImageStorage.cp_file/3 为纯 copy,避免 storage copy API 隐式承担格式转换职责。

Why

  • API 之前会在 Plug parser 层因为默认 body limit 直接抛错,和 UI 上传限制不一致。
  • TIFF 虽然是图片格式,但浏览器原生支持很弱,保存为 .tiff 会导致图片详情页无法正确显示。
  • 截图/剪贴板 TIFF 更适合转换成 PNG:无损且更适合保留文字和 UI 细节。
  • copy 函数应保持语义清晰;格式 normalization 应发生在上传准备阶段。

Validation

  1. mise exec -- mix format
  2. mise exec -- mix compile --warnings-as-errors
  3. mise exec -- mix test test/vmemo/memo/image_storage_test.exs test/vmemo_web/api/v1/auth_test.exs test/vmemo_web/api/v1/image_controller_test.exs test/vmemo_web/controllers/file_controller_test.exs
  4. mise exec -- mix check

Related

  • Issues: none
  • PRs: none

Background

  • 用户通过 API 上传约 32MB 的图片时触发过 parser-level too large error。
  • 用户随后上传 TIFF 截图时 API 曾返回 400;支持 TIFF 后,原样保存 .tiff 又导致浏览器详情页无法显示。
  • 本 PR 接受 TIFF 作为输入格式,但统一保存为浏览器友好的 PNG。

Notes

  • 现有已保存的 .tiff 文件不会自动迁移;重新上传后会保存为 .png
  • mix check 仍会打印项目已有的 Sobelow/Credo 提示,但命令退出码为 0。

API 上传大小限制改为配置驱动,multipart 413 返回标准 JSON,并将 TIFF 上传规范化保存为 PNG。
@ThaddeusJiang ThaddeusJiang self-assigned this Jun 8, 2026
将 TIFF 转 PNG 移到 ImageUpload.store,恢复 ImageStorage.cp_file
为纯复制,并更新上传调用点和测试。
@ThaddeusJiang

Copy link
Copy Markdown
Owner Author

已根据 review 调整:ImageStorage.cp_file/3 恢复为纯 copy,TIFF -> PNG 前置到 ImageUpload.store/3,并补充了职责边界测试。PR 描述已同步。

@ThaddeusJiang ThaddeusJiang merged commit f33954f into main Jun 8, 2026
3 checks passed
@ThaddeusJiang ThaddeusJiang deleted the fix/api-image-upload-tiff-png branch June 8, 2026 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant