關(guān)于文件上傳的ajax交互

首先我們來了解一下上傳文件

<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的內(nèi)容

這里要用到change()函數(shù),當元素的值發(fā)生改變時,會發(fā)生 change 事件。

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

file獲取出來的內(nèi)容

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

我們需要將圖片文件轉(zhuǎn)換成二進制流的方式傳給后臺,這里我介紹兩種方式

FileReader

這一篇博客對FileReader的使用介紹得很詳盡,請參看
http://blog.csdn.net/zk437092645/article/details/8745647/

FormData

FormData有兩種用法

  • 提交表單數(shù)據(jù)

提交表單還有一個方法是serialize(),但這個方法不能上傳文件

使用方法

  1. 在html的form標簽里添加 enctype ="multipart/form-data",這個很重要,沒有這個后面所有都沒效果
<form class="form-horizontal" id="productform" enctype ="multipart/form-data">
  1. 在html表單的input中添加name屬性,name對應數(shù)據(jù)庫中的字段名
<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參數(shù)說明

data.append(數(shù)據(jù)庫字段名,你添加的東西名字)

最后如果前端成功的將數(shù)據(jù)發(fā)給后臺了,你可以在network中看到這樣的信息。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 上傳文件已經(jīng)是個已經(jīng)成熟的前端技術(shù),目前開源的拿來即用的前端上傳插件也比較多,諸如:Web Uploader、JS...
    清曉凝露閱讀 11,461評論 0 22
  • 最近項目需要使用 Angular,對于初學 Angular 的我只能硬著頭皮上了,項目中有一個需求是文件上傳,磕磕...
    雖萬萬人吾往矣閱讀 18,349評論 3 20
  • 背景描述 有這么一個需求:一個表單,有十幾個input,一個文件上傳的input,可以上傳一張圖片。 要求上傳圖片...
    Java_or_PHP閱讀 4,576評論 0 5
  • 說起錄屏的需求是從自己學習 Keyote、Final Cut Por網(wǎng)上的教程開始的,平時喜歡鼓搗軟件,有朝一日自...
    阿吉先生ok閱讀 32,275評論 5 6