继前文的项目准备中,涉及到上传歌曲,所以有了这一过程,在项目目录下设置了资源文件夹暂存歌曲,完场云端上传后即删除所有文件
上传表单
主要设置了上传提交两个选项,定义了上传属性,方便后续获取到文件对象,提交到后台的upload方法做处理,这里传入一个from的参数获取到当前页面上下文,当文件传输无误时返回原页面
{% csrf_token %}
views.py
from django.shortcuts import render, redirect
from django.urls import reverse
import os
import oss2
from django.http import HttpResponse
def upload_file(request):
referer = request.META.get('HTTP_REFERER', reverse('home'))
if request.method == "POST": # 请求方法为POST时,进行处理
myFile =request.FILES.get("myfile", None) # 获取上传的文件,如果没有文件,则默认为None
if not myFile:
return HttpResponse("no files for upload!")
destination = open(os.path.join(dir_path, myFile.name), 'wb+') # 打开特定的文件进行二进制的写操作
for chunk in myFile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
# with open(oss2.to_unicode(dir_path+"/"+myFile.name), 'rb') as f:
# bucket.put_object(myFile.name, f)
os.chdir('../static')
shutil.rmtree("media")
os.mkdir("media")
return redirect(request.GET.get('from', reverse('home')))
这里只简单演示了下上传操作,其中涉及其他版块的操作我都隐去了,大家可以去尝试一下,注意django的表单操作记得要加上{{csrf_token}}生成验证不然会抛出403的验证失败异常。