Python Urllib скачать видео, но оно не воспроизводится - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь загрузить видео с URL-адреса, используя пакет Pyll для urllib.Моя версия Python 3.6.

Вот что я попробовал: from views.py:

def post(self, request, *args, **kwargs):
    serializer = VideoConverterSerializer(data=self.request.data)
    validation = serializer.is_valid()
    print(serializer.errors)
    if validation is True:
        url = request.POST.get('video_url')
        try:
            r = urllib.request.urlopen(url)
            with open('my_video.mp4', 'wb') as f:
                f.write(r.read())
            rea_response = HttpResponse('my_video.mp4', content_type='video/mp4')
            rea_response['Content-Disposition'] = 'attachment; filename=my_video.mp4'
            return rea_response
        except TimeoutError:
            return HttpResponse(TimeoutError)
    else:
        return HttpResponse('Not a valid request')

Вот пример URL, который я пытаюсь использовать:

https://expirebox.com/files/386713962c5f8b7556bc77c4a6c2a576.mp4

Приведенный выше код загружает видеофайл как my_video.mp4, но видео не воспроизводится.Фактический размер видео составляет ~5.9 MB, но размер загружаемого видео - только 11 KB, поэтому определенно что-то не так с загруженным видео.

Что здесь может быть не так?

helpмне, пожалуйста!

Заранее спасибо!

1 Ответ

0 голосов
/ 20 сентября 2018

Вы фактически не включаете видеофайл в свой ответ;вы просто создаете HttpResponse с буквенным текстом «my_video.mp4».

Вместо того, чтобы читать файл и затем пытаться передать этот файл в ответе, вам, вероятно, следует использовать буфер в памяти:

from io import BytesIO
...
r = urllib.request.urlopen(url)
data = BytesIO(r.read())
rea_response = HttpResponse(data, content_type='video/mp4')

Однако следует помнить, что ваш URL-адрес указывает на страницу HTML, а не на видеофайл.

...