如何在django google app引擎上传文件?

时间:2013-05-24 09:20:39

标签: django google-app-engine python-2.7

我是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上传文件?请解决我的问题。谢谢......

2 个答案:

答案 0 :(得分:5)

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

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

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

请按照那里的说明进行操作。

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

答案 1 :(得分:2)

使用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