前端如何向后端传文件?(ajax,form表单)

本文介绍了前端如何使用Ajax和Form表单向后端发送文件。Ajax方式需借助FormData对象,添加文件和普通键值对,设置contentType和processData参数为false。后端Django能自动解析请求,文件数据存储在request.FILES中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ajax

ajax 发送文件需要借助于js内置对象FormData

1 利用js中的FormData内置对象生成一个formdata对象

2 将文件对象添加到formdata对象中,

3 基于ajax发送给后端

4 django后端会自动识别的formdata对象,并将问价数据解析并封装到request.Files中

实现代码

前端

<script>
    //点击按钮朝后端发送普通键值对和文件数据
    $('#d4').on('click',function (){
        // 1 需要先利用FomData内置对象
        let formDataObj =  new FormData();
        // 2 添加普通的键值对
        formDataObj.append('username',$('#d1').val());
        formDataObj.append('username',$('#d2').val());
        // 3 添加文件对象
        formDataObj.append('myfile',$('#d3')[0].files[0])
        // 4 将对象基于ajax发送给后端
        $.ajax({
            url:'',
            type:'post',
            data:formDataObj,//直接将对象放在data后面即可
            //ajax发送文件必须要指定的两个参数
            contentType:false, //不需要任何编码,django后端能够自动识别formdata对象
            processData: false, //处理数据=false ,告诉浏览器不要对数据进行任何处理
            success:function (args){
            }
        })
    })

</script>

后端

'后端'
def ab_file(request):
    if request.is_ajax():
        if request.method == 'POST':
            print(request.POST)
            print(request.FILES)
    return render(request, 'ab_file.html')
小总结

    1 需要利用内置对象 FormData
            // 2 添加普通的键值对
            formDataObj.append('username',$('#d1').val());
            formDataObj.append('username',$('#d2').val());
            // 3 添加文件对象
            formDataObj.append('myfile',$('#d3')[0].files[0])

     2 需要指定两个关键性的参数
            contentType:false, //不需要任何编码,django后端能够自动识别formdata对象
            processData: false, //处理数据=false ,告诉浏览器不要对数据进行任何处理
                
      3 django 后端能够直接识别到formdata对象,
            并且能够将'内部的普通键值自动解析并封装到request.POST中', 
            '文件数据自动解析并封装到request.FILES中'

form表单

实现代码

前端

"""
form表单上传文件类型的数据:
1. 请求方式必须是post
2. enctype必须是form-data

multipart/form-data:通过post上传的数据包括文件时,form表单的enctype属性必须使用这种类型
"""


<form action="" method="post" enctype="multipart/form-data">
    <input type="text" name="username">
   上传文件:<input type="file" name="files">
    <input type="submit" value="提交">
</form>

后端

def files(request):
    if request.method == 'POST':
        # 只能获取到普通的键值对数据,文件不行
        # print(request.POST)

        # 获取文件数据
        print(request.FILES)

        # 获取文件对象 括号里面的名字,对应是是前端input框的名字('files')
        file_obj = request.FILES.get('files')
        print(file_obj.name)  # 取得文件对象的名字
        with open(file_obj.name, 'wb') as f:
            for line in file_obj.chunks(): # 推荐加上chunks方法,不加也行
                f.write(line)
        return HttpResponse('完毕')
    return render(request, 'files.html')
小总结:

总结:
        1 request.FILES  获取文件数据
        2 files_obj = reuqest.FILES.get('files') # 得到文件对象
        3 files_obj.name     # 得到文件的名字
        4 将文件写入 名字为路径
            with open(files_obj.name,'wb')as f:
                for line in files_obj:
                    f.write(line)
        将文件对象写入到指定路径

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值