我正在尝试使用Python的urllib包从s URL下载视频。我的Python版本是3.6。
这是我尝试过的:从 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
,因此下载的视频肯定有问题。
这里可能出了什么问题?
请帮帮我!
提前感谢!
你实际上并没有在响应中包含视频文件;你只需创建一个带有文字文本"my_video.mp4"的HttpResponse。
与其读入文件,然后尝试在响应中传递该文件,不如使用内存缓冲区:
from io import BytesIO
...
r = urllib.request.urlopen(url)
data = BytesIO(r.read())
rea_response = HttpResponse(data, content_type='video/mp4')
但是,您应该注意,您的 URL 似乎指向 HTML 页面,而不是视频文件。