[英]Why is uploading a video to azure blob storage this slow? [DJANGO]
使用 Django 将视频上传到 Azure blob 存储时遇到问题。 我不确定它是否与 Django 框架缓慢或我的代码有关。
顺便说一句,这是我和我朋友的一个项目,他做了最多的工作。 所以有可能我不知道一切。 :)
上传 1GB 大小的视频时,大约需要 2/3 分钟。
我已经研究但尚未实施的内容:
视频模型:
def create_file_path_video(instance, name):
return os.path.join('sources', str(instance.pk), name)
class Video(models.Model):
video = models.FileField(upload_to=create_file_path_video, validators=[validate_video_file_extension], null=True)
name = models.CharField(max_length=255, null=True)
storage_name = models.CharField(max_length=255, null=True)
size = models.BigIntegerField(null=True)
fps = models.FloatField(null=True)
frames_count = models.FloatField(null=True)
duration = models.FloatField(null=True)
type = models.CharField(max_length=10, null=True)
uploaded_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=False)
uploaded_at = models.DateTimeField(default=datetime.now, null=True, blank=True)
deleted_at = models.DateTimeField(null=True, blank=True)
def __duration(self):
return int(self.frames_count/self.fps)
形式:
class UploadVideoForm(forms.ModelForm):
class Meta:
model = Video
fields = ['video']
widgets = {
'name': forms.HiddenInput(),
'uploaded_by': forms.HiddenInput(),
'uploaded_at': forms.HiddenInput(),
'type': forms.HiddenInput(),
'size': forms.HiddenInput()
}
看法:
def video_create_view(request):
context = {}
form = UploadVideoForm(request.POST or None, request.FILES or None)
if request.user.is_superuser or request.user.groups.filter(name="Editor").exists():
if request.method == 'POST':
form = UploadVideoForm(request.POST, request.FILES)
video_obj = Video.objects.create()
if form.is_valid():
name = request.FILES['video'].name.split('.')[0]
date_string = datetime.datetime.now().strftime("%Y-%m-%d")
video_obj.name = name
video_obj.storage_name = date_string+"_"+name
video_obj.size = request.FILES['video'].size
video_obj.uploaded_by = request.user
video_obj.type = request.FILES['video'].name.split('.')[1]
video_obj.video = request.FILES['video']
video_obj.save()
video_path = get_file_path(video_obj.video)
video = cv2.VideoCapture(video_path)
# Find OpenCV version
(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
if int(major_ver) < 3:
fps = float(video.get(cv2.cv.CV_CAP_PROP_FPS))
frames_count = float(video.get(cv2.CAP_PROP_FRAME_COUNT))
video_obj.fps = fps
video_obj.frames_count = frames_count
video_obj.duration = frames_count/fps
else:
fps = video.get(cv2.CAP_PROP_FPS)
frames_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
video_obj.fps = fps
video_obj.frames_count = frames_count
video_obj.duration = frames_count/fps
video_obj.save()
video.release()
messages.success(request, "Video uploaded!")
return redirect('video:video-list')
context['form'] = form
return render(request, 'video/upload_form.html', context)
我已经调试过,我注意到video_obj.save()
几乎占用了它需要的所有时间。
有人可以帮我解决这个问题吗? 那就太好了! <3
可以使用Shared Access Signatures
将媒体资产上传到Azure Blob Storage
。
SAS Token
加速上传下载的解决方案
有关更多详细信息,请查看以下.Net
博客。 您可以搜索有关python语言的信息。
Python:
2. Azure 存储 - 上传文件 - Python (示例代码)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.