2015-11-12 52 views
0

我已覆蓋django中的默認文件存儲以將模型圖像字段保存​​在amazon s3中。只有Errno 22無效模式('rb')或文件名 - django自定義文件存儲

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從s3中獲取圖像文件。 requests然後打開吧?

回答

2

open()需要一個文件名,它不支持URL。

如果你想要獲取的網址,你需要使用庫如requests。由於該文件在S3上,因此可以使用像boto這樣的工具。

您可能會發現使用django-storages-redux更容易,而不是編寫自己的文件存儲。

+0

謝謝,是的,我知道,但我的桶是在法蘭克福,他們不支持sigv2。我從django-storages和django-storages-redux中得到了很多麻煩。所以我決定使用我自己的存儲空間。 – doniyor

+0

你是說,我可以在open()方法中使用boto存儲? – doniyor

+0

你最後一個問題是關於'django-storages',所以我想確保你知道'django -storages-redux' – Alasdair

相關問題