上传Djnago休息框架中的视频



我创建了一个post-api,它将为博客上传图像和视频。我可以处理多个图像,这不是问题。但我也必须从前端发送一段视频。我用Filefield做视频。我不是api方面的专家,但我认为,由于我编写的代码是同步的,所以我编写的所有内容都将同时完成。现在的问题是,如果用户想上传一个非常大的视频,例如200-500 mb,那么后api调用响应将非常长。有没有办法我可以先保存博客文章,返回响应,然后开始在直播服务器的数据库中上传视频。

我的型号:

class Blogposts(models.Model):  

blog_title = models.CharField(max_length=100blank=True)   
video  = models.FileField(upload_to="media",                             
null= True)

我试着使用django信号,但是django的信号也是同步的。我不确定,我上面所说的一切都可能是错误的。但是该如何处理呢??或者我应该用django芹菜吗??

DRF已经进行了部分更新。使用它。也就是说,您只对非文件字段进行发布请求。将视频字段设为true null true。

一旦成功完成,你会得到你帖子的id作为回应。然后发出补丁请求上传文件。

你的javascript算法大致看起来像这个

const handleFormSubmit => (data) {
file = data.video_file;
delete data.video_file;
axios.post('/blogs/', data).then(response => {
updateUiShowCreatedBlogWithVideoUploading();
id = response.id;
fileUploadRequestData = {
file: file
}
axios.patch('/blogs/${id}/', file).then(response => {
updateUiShowCreatedBlogWithVideoUploaded();
});
});
}

但通常情况下,对于大文件,我会直接从浏览器将其上传到对象存储(如S3(,而不会打扰django进程。完成后,像在补丁中一样附加对象。在这种情况下,您的模型将只是一个URL字段,而不是FileField。

如果这太多了,至少可以使用django存储,并让库处理从后端上传到S3的操作。

最新更新