【发布时间】:2023-03-09 07:18:01
【问题描述】:
我有这个 PNG 文件,从 Angular 前端上传到 django REST 服务器。大约 99.9% 的上传图片工作正常;您可以在管理员中查看它们并下载它们。
但每隔一段时间,我就会收到这些损坏的 PNG 图像。把图片的URL放到地址栏就可以看到图片,但是在django admin上看不到,也不能通过右键>save下载。
我将图像上传并下载到 Imgur,现在它似乎可以正常工作了。当我把它放在Django开发服务器的媒体目录中时,我可以在图片URL处右键下载。
但是好像和原文件一模一样!
- 我一无所获
- 文件大小相同
- 似乎两个文件都没有打开(用
lsof检查)
我没有选择。我将图像的两个版本都上传到了我的谷歌驱动器,并检查了如果你下载图像,损坏的一个似乎仍然是损坏的。也许有人可以弄清楚这些文件之间的区别是什么。
编辑:经过反复试验,我将问题缩小到文件名。显然,有些文件名会出错,但我不知道为什么。以下是有效和无效的文件名列表:
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,和文件名有关。当我删除连字符时,它可以工作。但是还有其他带有连字符名称的文件,所以我还不知道为什么这个文件会导致问题。