上传至 S3 克隆时出现 Broken pipe 错误,PDF 文件名包含 é、ï 等字符

最新的构建是 1 小时前完成的,我在 Meta 上无法复现,我怀疑这与法语本地化有关。

当我尝试上传名为 laïcité.pdf 的 PDF 文件时,会出现管道破裂(broken pipe)错误,但将其重命名为 laicite.pdf 后则能正常上传。

laïcité.jpg 也能正常上传。

名为 décroissance.pdf 的文件则报出不同的错误:“遇到内部错误,请重试。” :face_with_raised_eyebrow:

附注:不确定是否相关,我还使用了一个 S3 克隆服务(Scaleway),在尝试运行 rake uploads.migrate_to_s3 时同样出现了管道破裂错误,但感觉与此无关。

再附:是的……这可能与 S3 克隆的上传有关。我检查了一下,发现有一个三周前上传的带重音符号的文件,那是在启用 S3 上传选项之前不久 :roll_eyes:

1 个赞

discourse/lib/file_store/s3_store.rb at main · discourse/discourse · GitHub 的第 62 行

options[:content_disposition] = "attachment; filename=\"#{filename}\""

content disposition 的格式或许应该改为

options[:content_disposition] = ActionDispatch::Http::ContentDisposition.format(
        disposition: "attachment", filename: upload.filename
      )

如果是这样,或许这些 content_disposition 也应一并修改:

4 个赞

我想你是对的,这类关于文件名的问题总是容易被我忽略。我明天应该能提交一个 PR 来修复这个问题。感谢你的报告!

4 个赞

此处修复即将合并。已使用上述 PDF 文件名进行测试,运行正常:ok_hand:。修复即将上线!

3 个赞