Я использую Tweedy, чириканскую библиотеку питонов, django-storages
и boto
. У меня есть пользовательская команда manage.py
, которая работает корректно локально, она получает изображение из файловой системы и твиты этого изображения. Однако, если я изменяю хранилище на Amazon S3, я не могу получить доступ к файлу. Это дает мне эту ошибку:Django Tweepy не может получить доступ к файлу Amazon S3
raise TweepError('Unable to access file: %s' % e.strerror)
Я попытался сделать изображения в ведре «общедоступными». Не работает. Это код (работает без S3):
filename = model_object.image.file.url
media_ids = api.media_upload(filename=filename) # ERROR
params = {'status': tweet_text, 'media_ids': [media_ids.media_id_string]}
api.update_status(**params)
Эта линия:
model_object.image.file.url
дает мне полный URL изображения Я хочу, чтобы чирикать, что-то вроде этого:
Я также попытался создать URL-адрес вручную, так как это общедоступное изображение, хранящееся в моем ковше, например:
filename = "https://criptolibertad.s3.amazonaws.com/OrillaLibertaria/195.jpg"
Но это не сработает.
¿Почему у меня ошибка Unable to access file
?
Исходный код из tweepy выглядит следующим образом:
def media_upload(self, filename, *args, **kwargs):
""" :reference: https://dev.twitter.com/rest/reference/post/media/upload
:allowed_param:
"""
f = kwargs.pop('file', None)
headers, post_data = API._pack_image(filename, 3072, form_field='media', f=f) # ERROR
kwargs.update({'headers': headers, 'post_data': post_data})
def _pack_image(filename, max_size, form_field="image", f=None):
"""Pack image from file into multipart-formdata post body"""
# image must be less than 700kb in size
if f is None:
try:
if os.path.getsize(filename) > (max_size * 1024):
raise TweepError('File is too big, must be less than %skb.' % max_size)
except os.error as e:
raise TweepError('Unable to access file: %s' % e.strerror)
Похоже Tweepy
не может получить изображение из ведра Amazon S3, но как я могу заставить его работать? Любые советы помогут.
url - это метод, а не атрибут. –
@BurhanKhalid, как я могу его назвать? Если я делаю 'model_object.image.file.url()' Я получаю ошибку: ''Объект S3BotoStorageFile' не имеет атрибута 'url'' – alejoss
' model_object.image.url() ' –