【问题标题】:Two identical PNGs, one is corrupt两个相同的 PNG,一个损坏
【发布时间】:2023-03-09 07:18:01
【问题描述】:

我有这个 PNG 文件,从 Angular 前端上传到 django REST 服务器。大约 99.9% 的上传图片工作正常;您可以在管理员中查看它们并下载它们。

但每隔一段时间,我就会收到这些损坏的 PNG 图像。把图片的URL放到地址栏就可以看到图片,但是在django admin上看不到,也不能通过右键>save下载。

我将图像上传并下载到 Imgur,现在它似乎可以正常工作了。当我把它放在Django开发服务器的媒体目录中时,我可以在图片URL处右键下载。

但是好像和原文件一模一样!

  • 我一无所获
  • 文件大小相同
  • 似乎两个文件都没有打开(用lsof检查)

我没有选择。我将图像的两个版本都上传到了我的谷歌驱动器,并检查了如果你下载图像,损坏的一个似乎仍然是损坏的。也许有人可以弄清楚这些文件之间的区别是什么。

corrupt image

saved and fixed image

编辑:经过反复试验,我将问题缩小到文件名。显然,有些文件名会出错,但我不知道为什么。以下是有效和无效的文件名列表:

a-a14.png # Works
a-a10.png # Works
a-010.png # Works
a-ad0.png # Doesn't work
a-ad4.png # Doesn't work

所以看起来如果第二个、第三个和第四个字符是-ad,则无法加载文件。

【问题讨论】:

  • 不是 django 专家,但文件完全相同,我只是检查了校验和。那么很可能在 django 内部出现了问题,也许是将 url 保存到数据库中?想到不支持的字符
  • 在生产中,文件由 nginx 提供服务,同样的事情也发生在那里。我也尝试更改网址无济于事。
  • OK,和文件名有关。当我删除连字符时,它可以工作。但是还有其他带有连字符名称的文件,所以我还不知道为什么这个文件会导致问题。

标签: django angular png


【解决方案1】:

问题归结为文件名。显然,如果文件名与正则表达式 /.*-ad[0-9].png/ 匹配,则不会加载它。 django 和 nginx 服务文件都存在问题。

我为此开了一个新问题:Images that fit the regexp `/.*-ad[0-9]\.png/` can not be loaded in any browser?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 2015-02-22
    • 2016-05-07
    • 2020-10-01
    相关资源
    最近更新 更多