Google App Engine 上的 Django : cannot upload images

标签 django google-app-engine

我正在尝试为我的 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/

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

我的 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 作为库。

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

最佳答案

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

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

关于Google App Engine 上的 Django : cannot upload images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014147/

相关文章:

python - 确定 M2M 字段是否具有自定义直通模型

python - 寻找 Django 社交网络应用示例

google-app-engine - Google App Engine 上的 Cron 作业

google-app-engine - Golang 谷歌存储可恢复上传 HTTP 401

python - 在不使用表单的情况下上传 blobstore 中的文件

google-app-engine - 仅从 Google App Engine 访问 Google Compute Engine 实例?

django - 如何使用 django-discussion 应用程序?

python - 我如何在 Django 中使用 uWSGI 后台处理程序?

python - Django - 根据用户组显示/隐藏基本 html 中的 url?

java - AppEngine 持久对象延迟?