plupload 似乎没有在 IE 9 中上传文件。它适用于其他浏览器

Posted

技术标签:

【中文标题】plupload 似乎没有在 IE 9 中上传文件。它适用于其他浏览器【英文标题】:plupload does not seem to be uploading files in IE 9. It works in other browsers 【发布时间】:2014-01-27 16:06:36 【问题描述】:

在我们的项目中,我们使用 plupload 上传单个 excel 文件。这适用于除 IE9 之外的所有浏览器。单击上传链接时,将显示文件对话框,但尝试打开 Excel 时没有任何反应。以下是供参考的代码,我们将不胜感激任何解决此问题的帮助。提前致谢!

function initUploader(btnId, fileType, onSuccess) 

    if (typeof fileType == "undefined") fileType = "image";

    var arrFilters = new Array();
    var url = 'user/attachmentUpload';

    switch (fileType) 
        case "image": 
            arrFilters = [title : "Image files", extensions : "jpg,jpeg,gif,png"]; 
            url = 'assets/imgupload';
            break;
        case "xls":
            arrFilters = [title : "Spreadsheet files", extensions : "xls,xlsx"]; 
            url = 'user/attachmentUpload';
            break;
        case "media":
            arrFilters = [
                title : "Media files", 
                extensions : "mpeg4,mob,3gpp,avi,wmv,mp3,m4a,ogg,wav"
            ]; 
            break; 
        case "document":      
            arrFilters = [
                title : "Text files", 
                extensions : "doc,docx"
            ,
                title : "PDF files", 
                extensions : "pdf"
            ]; 
            break; 
        default:      
            arrFilters = [
                
                    title : "Image files", 
                    extensions : "jpg,jpeg,gif,png"
                ,
                
                    title : "Zip files", 
                    extensions : "zip"
                ,
                
                    title : "Media files", 
                    extensions : "mpeg4,mob,3gpp,avi,wmv,mp3,m4a,ogg,wav"
                ,
                
                    title : "Spreadsheet files", 
                    extensions : "xls,xlsx"
                ,
                
                    title : "Text files", 
                    extensions : "doc,docx"
                ,
                
                    title : "PDF files", 
                    extensions : "pdf"
                
            ]; 
            break; 
    

    var uploader = new plupload.Uploader(
        runtimes : 'gears,html5,html4,flash,silverlight,browserplus',
        browse_button : btnId,
        //container : 'container',
        max_file_size : '10mb',
        url : url,
        flash_swf_url : 'assets/js/vendor/plupload/plupload.flash.swf',
        silverlight_xap_url : 'assets/js/vendor/plupload/plupload.silverlight.xap',
        multiple_queues : false,
        filters : arrFilters,
        resize : width : 320, height : 240, quality : 90
    );

    $('#'+btnId).change(function()
        uploader.start();
    );    
    uploader.refresh();
    uploader.init();
    uploader.bind('FilesAdded', function(up, files) 
        up.refresh(); // Reposition Flash/Silverlight
        Utility.showProcessingBar();
        uploader.start();
    );
    uploader.bind('Error', function(up, err) 
        alert("Error: " + err.code + ", Message: " + err.message + (err.file ? ", File: " + err.file.name : ""));
        up.refresh(); // Reposition Flash/Silverlight
    );

    uploader.bind('FileUploaded', function(up, file, response) 
        var obj = eval('(' + response.response + ')');
        //alert('Files uploaded');
        if (typeof onSuccess == "function")
            onSuccess(obj.fileName);   
    );


【问题讨论】:

问题解决了吗? "这适用于除 IE9 以外的所有浏览器。"请详细说明。它适用于 IE8 、 IE 7 和 IE10 吗? 你有没有尝试联系图书馆的作者? 控制台有错误吗?任何可见的演示? 【参考方案1】:

对于和我有同样问题的每个人:

我有以下 HTML 代码:

<div class="container" style="display:none">
    <div>
        Logo:
    </div>
    <div style="clear"></div>

    <div id="uploader">
        <div id="runtime" class="right">
            No runtime was found !
        </div>
        <div>
            <a id="pickfiles" href="#">[Select files]</a>
            <a id="uploadfiles" href="#">[Upload files]</a>
        </div>
    </div>
</div>

container 类被创建为对话框:

$(function()
    $(".container").dialog(modal:true, width:400);
);

我们知道div最初是隐藏的,因为display: none(当然,你可以在对话框对象中设置autoOpen:false作为新选项),我们可以删除样式。

在 IE8(可能在早期和更高版本)中,如果 div 被隐藏,则无法正确实例化上传器。 (返回上述错误)

在 Chrome 和 Firefox 中(我没有在 Opera 中测试过这个问题),它可以正常工作。

所以,我的建议是避免隐藏块(即使您希望创建模态对话框)。

我从div 中删除了display:none 样式和dialog 对象,现在它在IE8 中运行良好。

为什么?我不知道为什么在 IE 中,在页面启动时没有创建对象的实例,而在 Firefox 和 Chrome 中,实例是正常创建的。

【讨论】:

抱歉迟到的评论(有一个小职业),但这正是我最终的结果。我删除了display:none,然后将其放入$(document).ready(function()); 以隐藏字段。现在它也适用于 IE8 和 IE9。 (虽然没有在较低的版本上测试它,因为我只需要 IE9+ 的支持【参考方案2】:

为了获得最大的兼容性,您应该重新排列插件优先级列表。

 var uploader = new plupload.Uploader(
        runtimes : 'gears,html5,html4,flash,silverlight,browserplus',

替换为

 var uploader = new plupload.Uploader(
        runtimes : 'flash,html5,silverlight,browserplus,gears,html4',

确保 flash 文件存在并且路径是相对于你的 js 文件的位置。

flash_swf_url : 'assets/js/vendor/plupload/plupload.flash.swf',

【讨论】:

【参考方案3】:

我正在使用这个 jquery。

你可以试试这个,因为我在 ie7+ 和所有浏览器中都使用它来上传文件。

这里是我新手上传js文件的文件代码。

<form id="uploadForm" method="post" enctype="multipart/form-data" action="javascript:void(0);" autocomplete="off">
                            <div class="vasplusfile_adds">
                                <label>Upload More</label>
                                <input type="hidden" name="myfile"  />
                                <div class="input customfile-container">
                                    <input type="file" name="uploadfile" id="file" />
                                </div>
                                <div class="clear"></div>
                                <br>
                                <div class="input" id="status" align="left" > </div>
                            </div>
                        </form>


<script>
  $(function() 
     $('#upload_file').live('change',function()  
    $("#status").html('<div id="upload_now" class="btn">Click to Upload</div>'););
    $('#upload_now').live('click', function()  
       $("#uploadForm").vPB( beforeSubmit: function()  
           $("#status").html('<div style="" align="center">Loading</div>');
            url: '',
            success: function(response)  // my response after file uploaded 
         ).submit(); ); ); 
</script>

示例可以从my fiddle找到。

祝你编码愉快:)

在 ie7 中工作的现场演示使用 http://vasplus.info/demos/upload_without_page_refresh/index.php

【讨论】:

欢迎来到 SO。您不在这里上传文件。你发布他们的内容并缩进 4 个空格,让它看起来像代码。对于常规文本,根本不要缩进。更多提示可以在Markdown 部分找到。 我提交了一个建议的编辑,我相信它可以满足您的需求。 :) 谢谢杰里米。您可以在文件控制器的更改事件中使用该 $.event。 我不明白你的意思。您可能会发现使用我所做的更改来编辑帖子很有帮助,看看我是如何让它看起来像这样的 - 然后您可以将其更改为您在此处所说的内容。 这很奇怪.. 你有一个 .success 函数检查它是否为假?

以上是关于plupload 似乎没有在 IE 9 中上传文件。它适用于其他浏览器的主要内容,如果未能解决你的问题,请参考以下文章

文件上传知识点

plupload:上传前验证图像尺寸?

plupload 大文件分片上传与PHP分片合并探索

在服务器端处理 plupload 的分块上传

Plupload .csv 问题

plupload文件上传插件