0

我是 Google App Engine 的新手。我已经在谷歌应用引擎中部署了纯 django 应用程序。它工作正常。但是我写的django文件上传功能如下图,

def forhandler(list, project_id, task_id, request):
    for i in list:
        filename = i
        extension = filename.content_type
        print i
        newdoc = FileUpload(project_id=project_id, task_id=task_id, file=filename, filetype=extension)
        newdoc.save()

当我运行 ./manage.py 运行服务器时。上述功能正常工作并正确上传文件。当我使用谷歌应用引擎意味着 dev_appserver.py my_project。这是完美的,但是当我使用上述功能上传文件时,它给出了一个错误,如下所示,

Exception Value: [Errno 30] Read-only file system: u'/home/nyros/Desktop/projectstat/projectstat/media/documents/2013/05/24/1354676051_chasm_fishing_w1.jpeg'

如何使用 django 和 google app Engine 上传文件?请解决我的问题。谢谢......

4

2 回答 2

5

这里的问题是 App Engine 使用只读文件系统,而默认的 Django 文件上传机制希望将文件存储在磁盘上。(无论您是否使用 App Engine,将图像存储在普通数据库中都是一个坏主意。)

相反,您应该使用 AppEngine 的 Blobstore API 来保存图像。这是 App Engine 提供的特殊存储空间,用于存储用户上传的大量数据。

好消息是有一个插件可以为您处理所有这些:http ://www.allbuttonspressed.com/projects/django-filetransfers

只需按照那里的说明进行操作,您就应该开展业务。

(注意:我只用 django-nonrel 试过这个。我从来没有用香草 Django 试过。)

于 2013-11-09T10:12:47.670 回答
1

使用 python 在谷歌应用引擎中上传文件的最佳方法是使用 blobstorehandler。

class Upload(blobstore_handlers.BlobstoreUploadHandler):

    for upload in self.get_uploads():
        try:
            img = Image()
            img.primary_image = upload.key()
            img.put()
        except:
            pass
于 2013-05-24T20:23:50.190 回答