Django基础(13)_文件上传
form表单文件上传
<form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} 用户名: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br> 头像: <input type="file" name="avatar" multiple> <!--添加multiple则可以上传多个文件--> <input type="submit"> </form>
若没有指定 multipart/form-data , 则提交的头像信息会在request.POST中,但只是一个文件名字,指定了则没有头像信息
指定后的content-type变为:

客户端接收文件
def upload(request): if request.method == 'POST': print(request.POST) # 若没有修改请求消息格式(content-type),那么文件名称会在request.POST中拿到,但是只是文件名称 # 里面放的是数据信息,类似于文件句柄 print(request.FILES) # <MultiValueDict: {'avatar': [<InMemoryUploadedFile: 1606968635000.png (image/png)>]}> file_obj = request.FILES.get('avatar') print(file_obj.name) # 文件名称 1606968635000.png # 保存文件,默认根目录 with open(file_obj.name, 'wb') as f: # 这里的file_obj.name 可以是随便指定的一个名字 for i in file_obj.chunks(): # 默认一次返回大小经测试为65536B,也就是64KB,最大为2.5M,是一个生成器 '''使用chunks是因为循环obj时是按照空格进行写入, 若文件没有空格啥的不就那啥了''' f.write(i) return HttpResponse('ok') return render(request, 'home/avatar.html')
ajax文件上传
{body}
{% csrf_token %}
用户名: <input type="text" name="username">
密码: <input type="password" name="password">
{# 头像: <input type="file" name="avatar" multiple>#}
头像: <input type="file" name="avatar">
<button id="sub">提交</button>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$("#sub").click(function (){
var uname = $('[name="username"]').val();
var pwd = $('[name="password"]').val();
var file_obj = $('[type="file"]')[0].files[0];
// ajax上文件,必须将文件数据放到一个叫做formdata的对象中才能发送
var formdata = new FormData();
formdata.append('username',uname)
formdata.append('password',pwd)
formdata.append('csrfmiddlewaretoken', '{{ csrf_token }}')
formdata.append('avatar',file_obj) // requser.FILES.get('avatar')
$.ajax({
url:'/upload/',
type:'post',
data:formdata, // ajax会将本次请求的数据格式改为 content-type: multipart/form-data
// 告诉ajax不要对数据进行预处理和加工,向上传文件必须加上这两个参数
contentType:false,
processData: false,
success:function (res){
}
})
});
</script>
views中和form表单提交一样
本文来自博客园,作者:长情不羁的五年,转载请注明原文链接:https://www.cnblogs.com/grlend/articles/14081588.html

浙公网安备 33010602011771号