2015-11-12 2 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, например. requests, а затем открыть справку?

ответ

2

open() принимает имя файла, оно не поддерживает URL-адреса.

Если вы хотите получить URL-адрес, вам необходимо использовать библиотеку, такую ​​как requests. Поскольку файл находится на S3, вы можете использовать такой инструмент, как boto.

Вместо того чтобы писать собственное хранилище файлов, вам может быть проще использовать django-storages-redux.

+0

спасибо, да, я знаю, но мое ведро находится во Франкфурте, и они не поддерживают sigv2. У меня было много головных болей из джанго-хранилищ и джанго-хранилищ-редуксов. поэтому я решил использовать свое собственное хранилище. – doniyor

+0

Вы имеете в виду, я могу использовать boto в open() методе хранения? – doniyor

+0

Ваш последний вопрос был о 'django-storages', поэтому я хотел убедиться, что вы знали о' django-storages-redux' – Alasdair

Смежные вопросы