【问题标题】:EAFlashUpload with ASP.NET 4.0 failes in Firefox, Chrome but works in IE使用 ASP.NET 4.0 的 Flask Upload 在 Firefox、Chrome 中失败,但在 IE 中有效
【发布时间】:2011-08-29 13:19:56
【问题描述】:

我在我的网站上使用带有 ASP.NET 4.0 的 EAFlashUpload 组件来允许上传多个文件(一次选择多个文件)。

该组件运行良好,在 IE (7, 8, 9) 上没有问题,但在 Firefox 或 Chrome 上,它在文件上传后给出“未知的 http 错误”(当它试图回发到服务器,我想)。

我在 Windows 2008 Server R2 上的 IIS7 下运行它,但我认为 IIS 或 Windows 的版本不是重要因素。

这是处理组件的客户端Javascript:

<script type="text/javascript">
    var params = { BGcolor: "#ffffff", wmode: "window" };
    var attributes = { id: "EAFlashUpload", name: "EAFlashUpload" };
    var flashvars = new Object();
    var uploadUrl = "Pages/SendAdvanced.aspx";
    //if (!document.all) {
    //    uploadUrl = "../" + uploadUrl;
    //}
    flashvars["uploader.uploadUrl"] = uploadUrl;
    flashvars["viewFile"] = "EAFUpload/TableView.swf";
    flashvars["view.removeButton.visible"] = "false";
    flashvars["view.clearButton.visible"] = "false";
    flashvars["queue.filesCountLimit"] = "10";
    flashvars["queue.fileSizeLimit"] = "2147483648";        // 2 gigabytes = 2147483648 bytes
    swfobject.embedSWF("EAFUpload/EAFUpload.swf", "EAFlashUpload_holder", "650", "380", "10.0.0", "EAFUpload/expressInstall.swf", flashvars, params, attributes);
    function EAFlashUpload_onMovieLoad(errors) { if (errors != "") alert(errors); }
</script>

编辑: 我在进一步测试后发现 Flash 组件抛出错误 #2038,这是“无法连接到服务器”的通用包罗万象的错误。不知道为什么这是 Chrome 和 FF 的问题,但这需要进一步调查...

【问题讨论】:

    标签: asp.net flash upload


    【解决方案1】:

    我找到了答案,这绝对不是我所期望的。

    这行代码是问题所在:

    var uploadUrl = "Pages/SendAdvanced.aspx"; 
    

    该行是一个相对路径,在客户端 Javascript 中设置,Flash 组件使用它来知道在哪里发布内容。

    当我把它改成这个时,它起作用了:

    var uploadUrl = "http://www.mysite.com/Pages/SendAdvanced.aspx"; 
    

    我希望有人告诉我的是,为什么第一行代码可以工作?为什么它可以在 Internet Explorer 中运行?它有什么特别的功能可以跟踪相对路径,而其他浏览器(和 Mac)不会这样做?

    【讨论】:

      【解决方案2】:

      当我在使用 flash 上传器时遇到类似问题时,我找到了这个答案(上传会在连接到服务器之前失败)。使用以下示例代码:

      var uploadUrl = location.href;
      if (!document.all) {
          uploadUrl = "../" + uploadUrl;
      }
      //alert(uploadUrl);
      
      var flashvars = new Object();
      flashvars["uploader.uploadUrl"] = uploadUrl;
      ...
      

      原来问题只发生在其中包含 & 和/或 # 的 URL 中(flash 对象正在接收这些但不知道如何处理它们因为它们没有被编码)。 要担心的角色比这些还要多,但是,就我而言,这最终解决了问题

      我只是将 & 符号替换为 flash 所期望的编码版本,并删除了哈希磅和它后面的所有内容(因为从服务器的角度来看它是无用的)。

      uploadUrl = uploadUrl.replace(/\&/g, '%26');
      uploadUrl = uploadUrl.replace(/#.*/g, '');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多