前端
<form action="" method="post" enctype="multipart/form-data">
{#<form action="" method="post" enctype="application/x-www-form-urlencoded">#}
<input type="file" name="myfile">
<input type="submit" value="提交">
</form>
'''
必须进行配置,且前二者解决编码问题,即可解决中文传输乱码问题
enctype="multipart/form-data" :不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
enctype="application/x-www-form-urlencoded" : 在发送前编码所有字符(默认)
enctype="text/plain" : 空格转换为 "+" 加号,但不对特殊字符编码。
'''
视图函数
from django.shortcuts import render, HttpResponse
import os,time
def fileupload(request):
if request.method == 'GET':
return render(request, 'fileupload.html')
if request.method == 'POST':
# FILES
print(request.FILES)
# <MultiValueDict: {'myfile': [<InMemoryUploadedFile: 1.png (image/png)>]}>
print(type(request.FILES.get('myfile')))
# <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
# from django.core.files.uploadedfile import InMemoryUploadedFile
# 从字典里根据名字,把文件取出来
myfile = request.FILES.get('myfile')
print(myfile)
print(type(myfile))
# 1.png
# <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
# 文件名字
name = myfile.name
print(name)
print(type(name))
# 1.png
# <class 'str'>
# 若存在相同文件,通过时间戳改名再上传
if os.path.exists(name):
# return HttpResponse('false')
now = time.strftime('_%Y%m%d%H%M%S')
name = name.replace('.',now+'.')
print(name)
# 打开文件,把上传过来的文件通过文件处理,循环存到本地
with open(name, 'wb') as f:
# for line in myfile.chunks(): 等同于 for line in myfile:
for line in myfile:
f.write(line)
# 存储成功 返回前端数据
return HttpResponse('ok')