上次第一部分我们用Django搭建了一个简易的文件上传网站,今天让我们来完善这个网站,增加一些细节部分的调整,并加入音乐高潮提取的API.
如果你还没有阅读过第一部分,建议先从第一部分开始阅读哦:Python Django快速开发音乐高潮提取网(1)。
本文完整源代码,请在后台回复:音乐高潮提取网 获取
1.文件校验
首先,为了安全起见,同时也为了减小服务器的压力,我们必须确认用户上传的文件是正确的。因此需要在views.py接收用户请求时,对用户上传的文件判断格式和大小。
在上篇文章中,我们使用了 forms 类生成表单,后端使用 request.FILES[‘docfile’] 获得了文件,这个对象具备什么属性呢?能不能让我们获得文件的大小和格式呢?
在一番搜索后,我终于找到了它的属性,这是一个叫做UploadedFile的类文件对象,具备以下属性:
详细文档:https://docs.djangoproject.com/en/3.0/ref/files/uploads/
通过size属性能获得bytes单位的文件大小,通过content_type可以获得文件属性,太好了,接下来就可以编写我们的校验代码:
这里我们限定了文件大小为10M (从bytes到MB的计算方法:1024*1024*10 ) ,上传文件的格式限定为wav和mp3. 将这个函数用于校验,如图所示:
好了,现在你再试一下上传图片,会发现什么反应都没有,上传mp3格式的音乐会返回上传成功的提示。
2.提取音乐的高潮部分
这一部分其实很简单,不过如果你还没看过音乐的高潮部分提取的文章,建议阅读:Python 音乐高潮提取。
首先,引入我们所需要的包(安装方法在Python Django快速开发音乐高潮提取网(1)) :
from pychorus import find_and_output_chorus
然后要拿到音乐文件的路径,才能过进行音乐提取,还记得我们在上节的教程中,其实是用了一个模型来上传文件的吗:
现在这个模型派上用场了。我们仅需要在文件对象保存之后,通过“对象.file.path ” 的属性就能获得文件的绝对路径。
ilePath = newdoc.file.path
不过,我们还需要设定音乐高潮部分提取完成后的输出位置,我的设定方法是在同目录下保存一个后缀为_high的文件:
不过要注意的是,由于该模块用到了一个名为SoundFile的包,这个包在输出文件的时候仅支持以下格式,为了方便处理,我们默认输出格式为wav.
3.返回音乐高潮部分给用户
接下来要返回提取完成的音乐高潮部分的文件,我们希望将文件作为附件给用户下载,让用户自行选择软件播放音乐,而不是在网站上直接收听音乐。
Django能非常容易地实现这一点:
将文件以二进制的形式打开,然后作为HttpResponse返回,设定 content_type 和 Content_Disposition 即可。
好了,再次运行项目:python manage.py runserver 上传一个音乐试一下:
这样,我们就能成功地完成用户上传——提取音乐高潮——返回用户下载的逻辑了。不过还有一些细节需要改进:
1.前端太丑了,能不能改进一下?
2.用户上传文件错误时没有提醒。
3.能不能多加点功能,比如其他用户的音乐分享?
下一次教程,我们就来完整地完成这个网站并上线!关注下方公众号,后台回复 音乐高潮提取网 获得本文全部源代码!
我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦
音乐相关教程:
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典