«Unicode-объекты должны быть закодированы перед хэшированием», когда я пытаюсь отправить файл .m3u8 на S3, используя boto3 - Django - PullRequest
0 голосов
/ 05 апреля 2020

Мне удалось нормально отправить видео на локальный компьютер, но когда я изменил настройки хранилища, я просто начал получать эту ошибку.

Ошибка указывает на строку, где код

instance.file.save(file_name_m3u8, file_m3u8) 

А затем сразу указывает на

# .../python3.8/site-packages/storages/backends/s3boto3.py
# ...
obj.upload_fileobj(content, ExtraArgs=params) 
# ...

Мой файловый объект file_m3u8:

file_object  
<_io.TextIOWrapper name='/tmp/media/lectures/first_video_2/2020-04-04_16-11-20.m3u8' mode='r' encoding='UTF-8'>

Простой пример:

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.core.files import File
from .models import Lecture


@receiver(post_save, sender=Lecture)
def handle_video_upload (sender, instance, created, ** kwargs):
         with open (  
"/tmp/media/lectures/first_video_2/2020-04-04_16-11-20.m3u8", "r") as file_object:
             file_m3u8 = File (
                 name = "media/lectures/first_video_2/2020-04-04_16-11-20.m3u8",
                 file = file_object)
             instance.file.save ("2020-04-04_16-11-20.m3u8", file_m3u8)

завершить код: https://pastebin.com/xVc3gbCK

Опять же: когда я удаляю все настройки хранилища s3 и boto и использую локальное хранилище, все отлично работает

PS: переменные в настройках. py:

# STATIC AWS+CLOUDFRONT
STATICFILES_STORAGE = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
AWS_ACCESS_KEY_ID = config("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = config("AWS_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = config("AWS_STORAGE_BUCKET_NAME")

CLOUDFRONT_ID = config("CLOUDFRONT_ID")
CLOUDFRONT_DOMAIN = f"{CLOUDFRONT_ID}.cloudfront.net"
AWS_S3_CUSTOM_DOMAIN = f"{CLOUDFRONT_ID}.cloudfront.net"

PS2: я также могу загрузить другие файлы на s3, но это не работает, когда я пытаюсь отправить .m3u8.

...