【发布时间】:2019-03-04 11:20:43
【问题描述】:
我们应用程序的一部分涉及将远程图像重新托管到我们自己的 S3 存储桶上并在我们的网站上显示结果。偶尔在大约 3% 的情况下,图像导入会导致 Firefox 认为图像已损坏,从而导致控制台中出现 Image corrupt or truncated. 错误。但是图像在 Chrome 中呈现得非常好,除非在打印页面对话框中,然后它表现出与 Firefox 相同的行为。它似乎在所有情况下都适用于 Safari。
当我将同一个文件重新导入 S3 或什至另一个托管站点(如 imgur.com)时,问题仍然存在。我创建了一个小提琴,您可以在其中使用已知损坏的图像为自己测试加载行为。
https://jsfiddle.net/ysLa27bo/1/
s3 = Aws::S3::Resource.new(region: 'us-west-1')
obj = s3.bucket(MY_BUCKET_NAME).object(MY_S3_DIR_PATH)
obj.put(body: open(REMOTE_PATH_TO_IMAGE), acl: 'public-read')
以上是我使用 AWS-SDK-S3 ruby gem 在 Rails 5+ 环境中通过 Sidekiq 工作程序运行的 S3 导入代码。我应该强调,这个损坏的图像问题是间歇性的;我 97% 的其他导入在所有浏览器和设置中都能正常工作,所以我认为这不是我的代码的问题。
我最好的猜测是图像在两个步骤之一中损坏:open()(读取远程图像 url)或我们导入到 S3 的部分。由于图像可以在 Chrome 中完美加载,我认为这更有可能在后一步出现问题。 Sidekiq 由于应用程序部署/重启(Heroku)而关闭是否可能会以某种方式损坏文件导入?只是猜测。
我的问题是:为什么会这样?如何确保导入 S3 时不会发生图像损坏?除了运行 Firefox 驱动的 Selenium 实例之外,我有什么方法可以在导入后自动检查图像的有效性?
【问题讨论】:
标签: google-chrome firefox image-processing amazon-s3 corrupt