继前文的项目准备中,涉及到上传歌曲,所以有了这一过程,在项目目录下设置了资源文件夹暂存歌曲,完场云端上传后即删除所有文件

上传表单

主要设置了上传提交两个选项,定义了上传属性,方便后续获取到文件对象,提交到后台的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的验证失败异常。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐