Errno 22无效模式('rb')或文件名 - django自定义文件存储

时间:2015-11-12 13:04:42

标签: python django file-io amazon-s3

我已经覆盖了django中的默认文件存储,以便在亚马逊s3中保存模型图像字段。

只有open方法没有按预期工作,我得到了:

[Errno 22] invalid mode ('rb') or filename: http://image.buzzhearts.com/media/2015/11/12/11/99f0301c46d7945c91b16b0c2d61ab13.jpg

该文件已在s3中:http://image.buzzhearts.com/media/2015/11/12/11/99f0301c46d7945c91b16b0c2d61ab13.jpg

代码:

class CS3Storage(FileSystemStorage):
    def open(self, name, mode='rb'):
        return File(open(self.path(name), mode)) # <-- problem

    def path(self, name):
        # returns http://image.buzzhearts.com/media/2015/11/12/11/99f0301c46d7945c91b16b0c2d61ab13.jpg
        return 'http://image.buzzhearts.com/%s' % name
我错过了什么?我想,我必须首先从s3获取图像文件,例如requests然后打开吧?

1 个答案:

答案 0 :(得分:2)

open()采用文件名,但不支持网址。

如果要获取网址,则需要使用requests之类的库。由于文件在S3上,您可以使用像boto这样的工具。

您可能会发现使用django-storages-redux更容易,而不是编写自己的文件存储空间。