美文网首页让前端飞Web前端之路
关于文件上传的ajax交互

关于文件上传的ajax交互

作者: 小红依 | 来源:发表于2017-07-29 16:54 被阅读153次

    首先我们来了解一下上传文件

    <input type="file">
    

    input的file常用上传类型

    后缀名       MIME名称
    *.3gpp    audio/3gpp, video/3gpp
    *.ac3    audio/ac3
    *.asf       allpication/vnd.ms-asf
    *.au           audio/basic
    *.css           text/css
    *.csv           text/csv
    *.doc    application/msword    
    *.dot    application/msword    
    *.dtd    application/xml-dtd    
    *.dwg    image/vnd.dwg    
    *.dxf      image/vnd.dxf
    *.gif            image/gif    
    *.htm    text/html    
    *.html    text/html    
    *.jp2            image/jp2    
    *.jpe       image/jpeg
    *.jpeg    image/jpeg
    *.jpg          image/jpeg    
    *.js       text/javascript, application/javascript    
    *.json    application/json    
    *.mp2    audio/mpeg, video/mpeg    
    *.mp3    audio/mpeg    
    *.mp4    audio/mp4, video/mp4    
    *.mpeg    video/mpeg    
    *.mpg    video/mpeg    
    *.mpp    application/vnd.ms-project    
    *.ogg    application/ogg, audio/ogg    
    *.pdf    application/pdf    
    *.png    image/png    
    *.pot    application/vnd.ms-powerpoint    
    *.pps    application/vnd.ms-powerpoint    
    *.ppt    application/vnd.ms-powerpoint    
    *.rtf            application/rtf, text/rtf    
    *.svf           image/vnd.svf    
    *.tif         image/tiff    
    *.tiff       image/tiff    
    *.txt           text/plain    
    *.wdb    application/vnd.ms-works    
    *.wps    application/vnd.ms-works    
    *.xhtml    application/xhtml+xml    
    *.xlc      application/vnd.ms-excel    
    *.xlm    application/vnd.ms-excel    
    *.xls           application/vnd.ms-excel    
    *.xlt      application/vnd.ms-excel    
    *.xlw      application/vnd.ms-excel    
    *.xml    text/xml, application/xml    
    *.zip            aplication/zip    
    *.xlsx     application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    
    

    accept属性

    只能选择png和gif图片

    <input id="fileId1" type="file" accept="image/png,image/gif" name="file" />
    

    multiple属性

    多文件上传

    <input id="fileId2" type="file" multiple="multiple" name="file" />
    

    获取file的内容

    这里要用到change()函数,当元素的值发生改变时,会发生 change 事件。

    $('input[type="file"]').change(function() {
        file = this.files[0];
    });
    

    file获取出来的内容

    File {name: "DSC03891.JPG", lastModified: 1451217306000, lastModifiedDate: Sun Dec 27 2015 19:55:06 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 3866624…}lastModified: 1451217306000lastModifiedDate: Sun Dec 27 2015 19:55:06 GMT+0800 (中国标准时间)name: "DSC03891.JPG"size: 3866624type: "image/jpeg"webkitRelativePath: ""__proto__: File
    

    我们需要将图片文件转换成二进制流的方式传给后台,这里我介绍两种方式

    FileReader

    这一篇博客对FileReader的使用介绍得很详尽,请参看
    http://blog.csdn.net/zk437092645/article/details/8745647/

    FormData

    FormData有两种用法

    • 提交表单数据

    提交表单还有一个方法是serialize(),但这个方法不能上传文件

    使用方法

    1. 在html的form标签里添加 enctype ="multipart/form-data",这个很重要,没有这个后面所有都没效果
    <form class="form-horizontal" id="productform" enctype ="multipart/form-data">
    
    1. 在html表单的input中添加name属性,name对应数据库中的字段名
    <input type="text" name="productName">
    <input type="text" name="productContent">
    
    1. ajax交互
    $('#submit').click(function(){
        var data = new FormData($('#productform')[0]);//[0]必须要
        $.ajax({
            type:"POST",
            url:"http://localhost/blog/management/insertProduct",
            data:data,
                    async:false,
                    cache:false,
                    contentType:false,
                    processData:false,
            success:function() {
                    alert("保存成功!");
            },
            error:function() {
                    alert("保存失败!");
                    console.log(productType);
            }
    
        })
            
            
    });
    
    • 直接使用FormData

    FormData也可以直接使用而不是提交整个表单

    <input type="file" name="picture" accept=".jpg,.png"
    <input type="button" name="" value="提交" class="submit">
    
    $('.submit').click(function() {
                var bannerIdText = $(this).closest('div').find(".bannerId").text();
                console.log($(".bannerId").html());
                var data = new FormData();
                data.append("picture",file);
                console.log(bannerIdText);
                data.append("bannerId",bannerIdText);
                console.log(data);
                $.ajax({
                    type:"POST",
                    url:" http://localhost/blog/management/updateBanner",
                    data:data,
                                async:false,
                                cache:false,
                                contentType:false,
                                processData:false,
                                enctype: 'multipart/form-data',//没有了在form声明处理方式,就必须在这里声明
                    success:function(data) {
                        alert("保存成功!");
                        console.log(data);
                    },
                    error:function() {
                        alert("保存失败!");
                    }
               })
            }); 
    

    FormData的append参数说明

    data.append(数据库字段名,你添加的东西名字)
    

    最后如果前端成功的将数据发给后台了,你可以在network中看到这样的信息。


    image.png

    相关文章

      网友评论

        本文标题:关于文件上传的ajax交互

        本文链接:https://www.haomeiwen.com/subject/imrclxtx.html