【问题标题】:Why can't I upload jpg files to my Django app via admin/?为什么我不能通过 admin/ 将 jpg 文件上传到我的 Django 应用程序?
【发布时间】:2010-11-26 23:36:58
【问题描述】:

我正在尝试将图像添加到我的 Django 应用程序中的模型中。

models.py

class ImageMain(models.Model):
  product = models.ForeignKey(Product)
  photo = models.ImageField(upload_to='products')

在开发模式下,每次我尝试通过 Django admin 上传图片时,我都会收到:

上传一张有效的图片。您上传的文件不是图片,或者 损坏的图像。

我通过 fink 安装了 libjpeg,然后在 ox X 10.5.7 上安装了 PIL 1.1.6

from PIL import Image
file = open('/Users/Bryan/work/review_app/media/lcdtvs/samsung_UN46B6000_front.jpg', 'r')
trial_image = Image.open(file)
trial_image.verify()

根据该会话,jpg 似乎是有效的。但是,它不加载。 我试过其他的jpg,它们也不起作用。

可能出了什么问题?

我能够成功上传 png 文件。

【问题讨论】:

    标签: python django


    【解决方案1】:

    在 PIL 已经编译/安装在系统上之后,您是否安装了 libjpeg?也许它无法正确找到解码器?

    这是我发现的一组说明,用于让 libjpeg 和 PIL 在 MacOS 上正常运行(请参阅最后;看起来您可能需要显式设置解码器的目录):

    http://djangodays.com/2008/09/03/django-imagefield-validation-error-caused-by-incorrect-pil-installation-on-mac/

    【讨论】:

      【解决方案2】:

      虽然在 Linux 而非 Mac 上,但我遇到了这个问题,因此可能无法提供太具体的信息。 但是,您可能也需要 libjpeg-devel(如果有 Mac 通讯员)。

      还要确保从系统中完全清除当前的 PIL 安装。在您确定 libjpeg 已正确安装之后,然后使用 build_ext -i 重新安装 PIL。然后运行 ​​PIL 的 selftest.py 来检查它是否给出了 JPEG 错误。

      【讨论】:

        【解决方案3】:

        只是做
        sudo easy_install PIL

        这将安装特定于您的操作系统的 PIL。 请确保在/usr/local/lib/python2.6/dist-packages/ 中生成的egg 文件有egg 信息(因为当我这样做时,egg 文件不正确)。如果不是,那么只需将 PIL-build-specific-name 重命名为 PIL 并在 dist-packages 文件夹中添加一个 PIL.pth 文件。在 PIL.pth 文件中写入 PIL 就完成了

        【讨论】:

          【解决方案4】:

          我在 Ubuntu 服务器上遇到了同样的问题,那么你可以通过在 PIL 之前安装 libjpeg-dev 来解决它。

          sudo apt-get install libjpeg-dev
          sudo pip install PIL --upgrade
          

          如果你已经在 PIL 之后安装了 libjpeg-dev。那么您可以先删除 PIL,然后尝试重新安装 PIL,如下所示。

          sudo pip uninstall PIL
          sudo apt-get install libjpeg-dev
          sudo pip install PIL
          

          它对我有用,希望它对你有用。

          【讨论】:

          • 我也安装了枕头 - 安装 libjpeg-dev 后必须卸载/重新安装。
          • 这对我不起作用。即使安装了 libjpeg-dev,在 virtualenv 中构建 PIL 仍然会报告“JPEG support not available”。
          • 非常感谢!这个错误让我发疯。最新版本的 PIL,可以很好地从文件中读取相同的 jpeg,但绝不会从 StringIO 中读取!你的食谱一下子就把它治好了。
          • 对 pip 安装的库进行更改后,是否需要重新启动服务器?还是别的什么?
          【解决方案5】:

          Django 正在尝试从名为 PIL 的文件夹中导入 PIL,但 PIL 将自身安装在名为 e.g. 的文件夹中。 PIL-1.1.7-py2.6-macosx-10.6-universal.egg,因此导入失败 - Django(或 PIL ?)似乎将其解释为损坏的图像。

          一个简单的符号链接

          host:~ user$ cd /Library/Python/2.6/site-packages
          host:site-packages user$ ln -vis PIL-1.1.7-py2.6-macosx-10.6-universal.egg PIL
          create symbolic link `PIL' to `PIL-1.1.7-py2.6-macosx-10.6-universal.egg'
          

          已在 Mac OSX 10.6.x MBP 上为我解决了这个问题。 在 Linux 机器上,该文件夹可能被称为 dist-packages 并位于 /usr/lib/python/ 下左右,但想法是相同的。

          您通常可以找到通常安装 python 模块的文件夹,如 here 所述。

          【讨论】:

            【解决方案6】:

            'python -v' 然后 'import _imaging' 对于确定 _imaging.so 的加载位置很有用。如果您重新安装 PIL 而不清除站点包中的 PIL 目录,您可能仍然在 Python 包目录下使用旧的 _imaging.so 运行。 PIL 的 selftest.py 将通过,因为您的构建目录中有一个新的 _imaging.so。并确保在 setup.py 中编辑 JPEG_ROOT 以在构建时选择正确的标题和 .so 目录。

            【讨论】:

              【解决方案7】:

              我在 Ubuntu 11.04 上遇到了类似的问题。显然在 Ubuntu 11 中,您似乎需要 libjpeg8-dev,而不是 libjpeg 或 libjpeg62。感谢 Guillaumes 的帖子http://gpiot.com/ubuntu-9-10-install-pil-in-virtualenv/

              【讨论】:

                【解决方案8】:

                请注意,对于在 Ubuntu 上使用 virtualenv 遇到此错误的任何人,this 帖子很有帮助。

                基本上,Ubuntu 将共享对象安装到 pip 不知道的位置。在这种情况下,pip 期望系统库位于 /usr/lib 中,但 Ubuntu 将它们放在 /usr/lib/x86_64-linux-gnu 或其他与架构相关的位置。

                短期解决方法是将库符号链接到 /usr/lib:

                sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
                sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
                sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
                

                这为我在 Ubuntu 12.04 上修复了错误。

                【讨论】:

                  【解决方案9】:

                  我遇到了类似的问题,我已经通过参考以下链接解决了它:

                  http://osqa.sjsoft.com/questions/96/why-is-there-no-jpegpng-decoder-when-i-pip-install-pil-on-ubuntu

                  【讨论】:

                    猜你喜欢
                    • 2021-08-11
                    • 2023-03-09
                    • 2020-10-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-11-30
                    • 2012-04-13
                    • 1970-01-01
                    相关资源
                    最近更新 更多