2012-10-02 63 views
4

我使用jQuery的文件上傳插件與鋼軌沿3插件這裏的任何PARAMS:jQuery的文件上傳IE9不張貼在上傳

https://github.com/blueimp/jQuery-File-Upload

我使用該插件允許用戶上傳個人資料照片。目前該解決方案適用於Chrome,Safari和Firefox。但在IE上它失敗了。當你在IE中選擇一個文件時,該插件發佈到服務器,但沒有參數,這是一個空的帖子。

實例後鍍鉻:

Started PUT "/api/1/settings/ajax_photo_upload" for 10.0.1.3 at 2012-10-02 15:39:20 -0700 
Processing by ApiV1::SettingsController#ajax_photo_upload as JS 
    Parameters: {"photo"=>#<ActionDispatch::Http::UploadedFile:0x007f9e4bac2e48 @original_filename="xxxxx.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[photo]\"; filename=\"xxxxx.jpeg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/3x/k1yb0r4s07q1jm82kq93ch180000gn/T/RackMultipart20121002-3633-sxsbtu>>}, "update_type"=>"general"} 

但是在IE9中,它不會發送任何東西上:

Started PUT "/api/1/settings/ajax_photo_upload" for 10.0.1.10 at 2012-10-02 15:39:31 -0700 
Processing by ApiV1::SettingsController#ajax_photo_upload as JS 

下面是我實現的:

$('input[type="file"]').fileupload({ 
    url : '/api/1/settings/ajax_photo_upload', 
    formData : [{ 
     name : 'authenticity_token', 
     value : $('meta[name="csrf-token"]').attr('content') 
    }], 
    type : 'PUT', 
    dataType: 'json', 
    add : function (e, data) { 
      data.submit(); 
    } 
}); 

HTML

<input name="user[photo]" type="file" accept="image/*" > 

任何想法,爲什麼IE會這樣做?謝謝

回答

0

這基本上是關於HTML 5的數據標籤的支持。 IE9有嚴重的問題。例如,當你上傳一個圖像時,它會在chrome中發送數據:blob並在你實際上傳圖像之前給你預覽。在IE中,你不能。在IE9中查看Gmail的郵件附件屏幕,您將看到不同之處。如果這是一個大型項目,我建議你使用Flash作爲圖片上傳。

+0

哪個數據標籤? – AnApprentice

+0

我想說的是數據屬性。當您添加圖片上傳時,請檢查Google Chrome的「檢查元素」。它得到blob:http%3A // blueimp.github.com它來自html 5本地數據存儲。您可以看到預覽圖像。在IE9中做同樣的事情。您只會看到文件名稱不支持本地數據屬性。 – 2012-10-02 23:13:43

4

您使用的是基本插件嗎?我是和我有同樣的問題,並與它搏鬥了一天才意識到我已經不包括jquery.iframe-transport.js插件:

<script src="js/jquery.iframe-transport.js"></script> 

見文檔here

哦!並感謝您對包括「authenticity_token」鍵值對爲「FORMDATA」片段 - 幫助我擺脫軌道3警告「警告:無法驗證CSRF令牌真實性」

+0

這通常就是在調用fileupload時沒有看到包含params的情況。 iframe傳輸文件不包含或包含不正確。 您通常可以通過設置* forceIframeTransport:true *在所有瀏覽器中重現此操作。 – concept47

0
$("#txt1").fileupload({ 
     replaceFileInput: false, 
     dataType: "json",   
     datatype:"json", 
     url: "<%=Page.ResolveUrl("~/WebService/AddAttachment.ashx")%>", 
     done: function (e, data) { 
      $.each(data.result, function (index, value) { 
     //You get the response data in here from your web service 
      }) 
      $("#txt1").val(""); 
     }`enter code here` 
    }); 

這是在IE8和IE9 +以上都經過測試和正常工作。請確保使用正確的dataType:「json」(或數據類型:「json」),並確保在調試和檢查時,將Web服務方法的響應正確更新爲data.result。 謝謝