Skip to content

解决了网站图标无法上传的问题 - #541

Open
MarshaveYang wants to merge 2 commits into
openRin:mainfrom
MarshaveYang:main
Open

解决了网站图标无法上传的问题#541
MarshaveYang wants to merge 2 commits into
openRin:mainfrom
MarshaveYang:main

Conversation

@MarshaveYang

Copy link
Copy Markdown

改动一:putStorageObjectAtKey(env, originFaviconKey, file) → 增加 file.type 参数
这个是补上了对象存储时的 Content-Type 元数据。没有这个参数,存到 R2/S3 的对象很可能会以默认的 application/octet-stream 或空类型存储,后续无论是浏览器直接访问该图标,还是走 Cloudflare Image Resizing(cf.image 那部分)做二次处理,都可能因为拿不到正确的 MIME 类型而失败或渲染异常。这个修改本身没有副作用,是典型的"漏传参数"类 bug,加上不会破坏其他逻辑。
改动二:imageRequest 去掉了 headers: c.req.raw.headers
这一个是关键,而且我认为极大概率就是当时导致"网址图标无法正常上传"的真正原因:

原代码把当前这个 POST 上传请求本身的 headers 转发给了内部这个 fetch(originFaviconUrl, ...)(这是用来把刚存好的原图重新拉回来做裁剪/转码的内部请求)
但上传请求的 headers 里包含 Content-Type: multipart/form-data; boundary=...、对应的 Content-Length,以及可能的 Authorization/Cookie 等,这些全都是描述"客户端上传给你的 POST 请求"的元信息
把这些 headers 原样套在一个全新的、指向存储桶的 GET 请求上,目标服务器(R2/S3 endpoint)大概率会因为 header 不匹配(比如声明了 multipart 但实际没有 body,或者 Content-Length 对不上)而拒绝或返回异常响应

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