4

我正在使用 jQuery 文件上传插件和 rails 3。插件在这里:

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

我正在使用该插件来允许用户上传个人资料照片。到目前为止,该解决方案适用于 Chrome、Safari 和 Firefox。但是在 IE 上它失败了。当您在 IE 中选择文件时,插件会发布到服务器但没有参数,这是一个空帖子。

chrome中的示例帖子:

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 会这样做?谢谢

4

3 回答 3

4

你用的是基础插件吗?我曾经遇到过同样的问题并与之斗争了一天才意识到我没有包含 jquery.iframe-transport.js 插件:

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

请参阅此处的文档。

哦!并感谢您关于将“authenticity_token”键值对包含为“formData”的片段 - 这帮助我摆脱了 rails 3 警告“警告:无法验证 CSRF 令牌真实性”

于 2012-10-25T04:50:14.473 回答
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”(或datatype:“json”),并确保在调试和检查时您的Web服务方法响应正确更新为data.result。谢谢

于 2013-10-11T06:57:07.630 回答
0

基本上是关于 html 5 的数据标签的支持。IE9 有严重的问题。例如,当您上传图像时,在 chrome 中它会发送 data:blob 并在您实际上传图像之前为您提供预览。在 IE 中,你不能。在 IE9 中检查 Gmail 的邮件附件屏幕,您会发现不同之处。如果是大型项目,我建议你使用 flash 作为图片上传器。

于 2012-10-02T23:02:39.427 回答