【问题标题】:Django on Google App Engine: cannot upload imagesGoogle App Engine 上的 Django:无法上传图片
【发布时间】:2013-04-07 12:09:18
【问题描述】:

我正在尝试在我的 Django 应用程序中为模型实现 ImageField。该应用程序在 Google App Engine 上运行。但是在上传(本地机器,使用 GAE SDK 1.7.7)时,我得到一个[Errno 78] Function not implemented

错误源于对django.core.files.storage.FileSystemStorage._save()中的os.makedirs()的调用;调用makedirs 的参数是:

u'/Users/.../PycharmProjects/myproject/media/uploaded

SETTINGS.PY 中的我的 MEDIA_ROOT 条目包含:

/Users/.../PycharmProjects/myproject/media/

SETTINGS.PY 中的我的 MEDIA_URL 条目包含:

/media/

媒体目录包含一个名为“uploaded”的子目录。我检查了权限,他们需要读/写权限。

我的 ImageField 的字段定义是:

image = models.ImageField(upload_to = "uploaded/"

出于某种原因,Django 想要创建已经存在的目录。使用 Django 控制台 os.path.exists(u'path/to/media/upload') 返回 True(这是正确的)所以我不明白 Django 为什么要创建目录。

此外,我使用 Google Cloud SQL 进行存储,并安装了 PILLOW 进行图像处理。我还在app.yaml 中添加了 PIL 作为库。

我可能遗漏了一些基本的东西,但目前对造成这种情况的原因一无所知...

【问题讨论】:

  • 您还可以从此处查看使用 GAE 上传文件/图像的更高级示例:upload.gae-init.appspot.com/resource/upload
  • 谢谢。非常有帮助。试图创建目录的那段代码让我有点失望。但我应该先阅读文档...

标签: django google-app-engine


【解决方案1】:

是的,我认为您在这里遗漏了一些非常基本的东西。您无权访问 Google App Engine 上的文件系统,因此 os.makedirs() 将不起作用。如果您想上传图片(或一般文件),您必须将它们存储在 Blobstore 或 Google Cloud Storage 中。在做任何其他事情之前,我建议您先浏览Blobstore Python API Overview,在那里您可以看到有关如何上传文件的完整工作示例。

此外,如果您将图像作为 blob 上传,您将能够通过提供 blob_key 来通过 get_serving_url() 获取图像服务 URL。使用此 URL,您可以为特定图像请求任何尺寸,甚至可以在服务器端对其进行裁剪,而无需任何额外工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 2013-09-14
    • 2012-09-05
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2013-08-25
    相关资源
    最近更新 更多