IE9下jQuery-File-Upload使用(後台為Java Spring MVC)

來源:互聯網
上載者:User

標籤:accept   htm   style   auto   操作   頁面   ali   cep   ret   

前言 項目中有個頁面跑在IE9的環境下,需要一個簡單的檔案上傳功能。嘗試了一下kendo ui 的upload組件,發現在IE9下回呼函數有bug。沒辦法網上查了一波,都說jQuery-File-Upload外掛程式好用,遂下載使用,並且成功了。

這裡提供一個DEMO,並記錄一下注意事項。

首先是下載外掛程式,然後按順序引用

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>  //建議使用jQuery 1.8以上版本<script src="js/vendor/jquery.ui.widget.js"></script><script src="js/cors/jquery.xdr-transport.js"></script><script src="js/jquery.iframe-transport.js"></script>                               //在IE下應載入此檔案解決跨域問題<script src="js/jquery.fileupload.js"></script><script src="js/jquery.fileupload-process.js"></script><script src="jquery.fileupload-validate.js"></script>                               //如果需要檔案類型驗證必須引入

然後新增一個簡單的input:

<input name="files" id="files" type="file"/> 

注意一下,如果為了介面好看,把這個input隱藏掉,然後使用自己的按鈕,並在JS裡觸發這個input的click事件的話,在IE8下會有無法觸發回調的BUG,我因為是IE9沒有遇到這個問題。

然後是JS代碼:

                        $("#files").fileupload({                                url: uploadurl,         //伺服器的URL                                dataType: ‘json‘,       //設定返回資料格式                                autoUpload: true,                                acceptFileTypes: /(\.|\/)(png|jp?g|gif)$/i,//檔案格式限制                                formData: {}     //可傳入參數                                processfail: function (e, data) {              //驗證檔案類型                                    var currentFile = data.files[data.index];                                    if (data.files.error && currentFile.error) {                                        alert("檔案類型錯誤!");                                    }                                },                                done: function (e, data) {                                    var result = JSON.parse(data.result);   //這裡注意,IE返回資料後,要用JSON.parse進行處理                                    //之後自行處理                                }                            }).error(function () {                                     console.log(arguments, ‘error‘);                            });

 

上後端代碼之前先說一下,正常情況下在IE9上傳檔案後,會彈出下載JSON檔案的框。查了下資料,發現

這是由於jQuery File Upload都是採用XHR在傳遞資料,伺服器端返回的通常是JSON格式的響應,但是IE會將這些JSON響應誤認為是檔案傳輸,然後直接彈出下載框詢問是否需要下載。

解決的辦法是將回應標頭從Content-Type: application/json   更改為Content-Type: text/plain或者text/html

下面JAVA後台代碼:

@RequestMapping(value = "/uploadurl", method = RequestMethod.POST, produces = {"text/plain"})    public String upload(@RequestParam MultipartFile files, @RequestParam Map formData) {        InputStream fis=files.getInputStream(); //檔案流        String fileName=files.getOriginalFilename(); //檔案路徑        //做自己的操作               result="true";
return result;
}

最後還有一個問題,更改回應標頭後傳回值最好是String或者JSON類型的,不然的話,前端會無法觸發回呼函數。

初次嘗試jQuery-File-Upload,還有很多強大的功能還沒用到,後台代碼也比較簡潔,其他再自行摸索。

嗯,最後吐槽一句IE真該淘汰了。

IE9下jQuery-File-Upload使用(後台為Java Spring MVC)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.