上次第一部分我们用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 批量下载网易云音乐歌单

Python 制作音乐高潮副歌提取器

Python Django快速开发音乐高潮提取网(1)

Python Django快速开发音乐高潮提取网(2)

Python Django快速开发音乐高潮提取网(3)

Python 超方便超快速剪辑音乐

Python 提取音乐频谱并可视化


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python实用宝典

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。