使用Django框架实现文件上传功能
upload.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>uploadFile</title> </head> <body> <form method="post" action="/upload/" enctype="multipart/form-data"> <input id="user" type="text" name="user" /> <input id='file' type="file" name="file" /> <input type="submit" /> </form> </body> </html>
模板文件中,创建一个form表单,在有文件上传的form表单中,method属性必须为post,而且必须指定它的encrytype=‘multipart/form-data’,表示不对字符进行编码,type类型为'file'
views
def uploadFile(request): if request.method == 'POST': my_file = request.FILES.get('file') with open(os.path.join('uploadFileDemo', my_file.name), 'wb') as f: for line in my_file.chunks(): f.write(line) return HttpResponse('上传成功') return render(request,'upload.html')
获取文件使用request.FILES.get()方法,因为上传的文件是保存在FILES这个字典中的,关于上传文件的几个方法和属性如下
myFile.read():从文件中读取整个上传的数据,这个方法只适合小文件 myFile.chunks():按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中 myFile.multiple_chunks():这个方法根据myFile的大小,返回True或者False,当myFile文件大于2.5M(默认为2.5M,可以调整)时,该方法返回True,否则返回False,因此可以根据该方法来选择选用read方法读取还是采用chunks方法 myFile.name():这是一个属性,该属性得到上传的文件名,包括后缀 myFile.size:这是一个属性,该属性得到上传文件的大小
#myFile.multiple_chunks()使用 if myFile.multiple_chunks() == False: # 使用myFile.read() else: # 使用myFile.chunks()