【问题标题】:SWFUpload works in IE, but not in FirefoxSWFUpload 在 IE 中有效,但在 Firefox 中无效
【发布时间】:2011-01-15 01:45:06
【问题描述】:

使用 SWFUpload v2.2、Firefox 3、IE 8、Flash 10 在我的 ASP.NET 应用程序中,所有上传都由 upload.aspx 处理(我在设置对象中设置了正确的 upload_url)。在 IE 8 中,上传会到达 upload.aspx 页面并被处理,但在 Firefox 中它们不会。有什么建议?

此处显示了用户为上传文件而访问的页面的大部分代码(注意:正在使用母版页):

<script type="text/javascript" src="../swfupload/swfupload.js"></script>

<script type="text/javascript" src="../js/handlers.js"></script>

<script type="text/javascript">
    var swfu;
    window.onload = function() {
        swfu = new SWFUpload({
            // Backend Settings
            upload_url: "../upload.aspx",
            post_params: {
                "ASPSESSID": "<%=Session.SessionID %>"
            },

            // File Upload Settings
            file_size_limit: "10 MB",
            file_types: "*.*",
            file_types_description: "All Files",
            file_upload_limit: 1,
            file_queue_limit: 1,
            //assume_success_timeout: 60,

            // Event Handler Settings - these functions as defined in Handlers.js
            //  The handlers are not part of SWFUpload but are part of my website and control how
            //  my website reacts to the SWFUpload events.
            file_queue_error_handler: fileQueueError,
            file_dialog_complete_handler: fileDialogComplete,
            upload_progress_handler: uploadProgress,
            upload_error_handler: uploadError,
            upload_success_handler: uploadSuccess,
            upload_complete_handler: uploadComplete,

            // Button settings
            button_image_url: "../Images/XPButtonNoText_160x22.png",
            button_placeholder_id: "spanButtonPlaceholder",
            button_width: 160,
            button_height: 22,
            button_text: '<span class="button">Upload File<span class="buttonSmall">(10 MB Max)</span></span>',
            button_text_style: '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',
            button_text_top_padding: 1,
            button_text_left_padding: 5,

            // Flash Settings
            flash_url: "../swfupload/swfupload.swf", // Relative to this file

            custom_settings: {
                upload_target: "divFileProgressContainer"
            },

            // Debug Settings
            debug: false
        });
    }
</script>

【问题讨论】:

    标签: firefox swfupload asyncfileupload file-upload


    【解决方案1】:

    我知道,这是一个旧帖子,但也许它有助于解决某些人的问题,因为我今天遇到了同样的问题。

    我不是通过使用 post 数组解决了这个问题,因为我不知道如何以及在哪里调试这个脚本,而是通过生成查询字符串

    <script type="text/javascript">
        var swfu;
        window.onload = function() {
            swfu = new SWFUpload({
                // Backend Settings
                upload_url: "../upload.aspx",
                post_params: {
                    SessionID: "<%=Session.SessionID %>",
                    OtherID: "<%=OtherID %>"
                },
    
                //And here comes the highlight
    
                use_query_string : true,
    
                //code ...
    

    之后你会得到一个这样的查询字符串:?SessionID=(id)&amp;OtherID=(otherid)

    这在每个浏览器下都可以保证。

    【讨论】:

    • OtherID 用于什么目的?
    • 没关系。我只是将其添加为示例。感谢您的关注。
    • 所以这里重要的是use_query_string的使用?我仍然不明白这是如何解决问题的。你能解释一下吗?
    • swf 上传倾向于通过 POST 将 post_params 数组发送到服务器。使用 use_query_string 您可以强制 swfupload 通过 GET 发送参数。 v2.2 无法在 ie7-8 中发布参数。这解决了它,在.. 某种方式
    • 感谢您的解释。你的意思是 sfwupload 的 flash 组件将使用 POST 请求?
    【解决方案2】:

    也可以在其他浏览器中尝试,例如 Safari 或 Chrome。

    如果它仅适用于 IE,则可能是其他答案提到的 Flash Cookie Bug。

    如果它适用于除 Firefox 之外的所有应用程序,则可能是没有为进度条定义 css。我不知道为什么这会导致问题,但我发现确实如此。一旦我将示例样式放入我的 css 文件中,它就开始在 Firefox 中运行。

    我使用的css如下:

    DIV.ProgressBar { width: 100px; padding: 0; border: 1px solid black; margin-right: 1em; height:.75em; margin-left:1em; display:-moz-inline-stack; display:inline-block; zoom:1; *display:inline; }
    DIV.ProgressBar DIV { background-color: Green; font-size: 1pt; height:100%; float:left; }
    SPAN.asyncUploader OBJECT { position: relative; top: 5px; left: 10px; }
    

    【讨论】:

    • 感谢您的出色回答。我有一个错误,它可以在 IE8/9 中正常上传,但在 Firefox 中它会失败说(在 ASP.NET 中)Request.Files 集合为空。添加 CSS 代码使其在 Firefox 中完美上传。
    【解决方案3】:

    使用 HTTP 跟踪/调试代理来查看是否有任何内容实际发送到服务器,以及正在接收什么响应(如果有)。 Charles 是我最喜欢的,它与 Flash(以及其他一切 HTTP)配合得很好。 WireShark 和 Fiddler 是其他选择。

    查尔斯 http://www.xk72.com/charles/

    WireShark http://www.wireshark.org/

    提琴手 http://www.fiddler2.com/fiddler2/

    【讨论】:

    • Charles 是一个绝妙的建议!使用 Charles,我能够确认没有任何内容被发送到服务器(所有请求都是 GET)。现在我仍然试图找出原因!此外,查尔斯没有显示来自 IE 的流量,所以我很难弄清楚一个成功的 POST 是什么样的。 Charles 应该会自动配置 IE,看起来是,但没有显示流量。
    • IE 和 Firefox 代理的工作方式不同。据我记得,你必须专门为 IE 开启 Windows 代理,如果你在本地开发,你需要在 IE 的某个地方关闭一个设置以“绕过本地主机的代理”。
    • 我刚刚意识到这是 IE 7 的一个已知问题,通过“computername”而不是“localhost”访问我的网站可以解决此问题。对 IE 和 Firefox 的运行扫描显示它们都经历了完全相同的 GET 序列,但在 Firefox 中没有要上传.aspx 的帖子,而在 IE 中有。感谢您继续帮助我解决这个 Sam。有什么我可以寻找的线索可以说明为什么 Firefox 不 POST 吗?
    • 我能说的唯一其他建议是确保您安装了调试 Flash 播放器。如果您有发布播放器,它不会显示错误消息,但调试的会。我很确定您可以自行下载调试播放器,但如果不能,它会附带 Adob​​e 产品,如 Flex Builder 和 Flash CS4(有免费试用版)。
    【解决方案4】:

    http://demo.swfupload.org/Documentation/

    Cookie 问题

    在 Windows 上,非 IE Flash Player 插件(FireFox、Opera、Safari 等)将发送 IE cookie,无论使用何种浏览器。这会破坏许多服务器端脚本技术的身份验证和会话。

    如果希望使用 Session,开发人员应手动传递 Session 和 Authentication cookie 信息并在服务器端手动恢复 Session

    SWFUpload 包包含 PHP 和 ASP.Net 的变通示例代码

    ===== 从那里实施一些一次性身份验证票将使事情正常进行

    您也可以设置此身份验证仅在用户使用上传时应用的条件

    但是,确保身份验证 cookie 不会绕过站点的其他部分的一些测试可能很重要,具体取决于您为此操作发出 cookie 的方式。

    【讨论】:

      【解决方案5】:

      只是想确认刚刚通过将post_params 变量添加到 SWFUpload 初始化程序来解决相同的问题。

      post_params : {
          PHPSESSID : '<?=session_id()?>'
      },
      

      【讨论】:

        【解决方案6】:

        听起来你可能会遇到this Flash bug。 Nort 的解决方案是大多数人一直在使用的解决方案。但是,根据您的语言/框架,您可能需要添加一些额外的服务器端代码以从 url 获取会话变量并强制将其用作当前会话。

        您可以尝试this StackOverflow question 中的解决方案,或尝试使用谷歌搜索类似“flash upload cookie”的内容。

        【讨论】:

          【解决方案7】:

          我找到了答案……终于。我为此苦苦挣扎了很长时间。不敢相信这是答案。原因是SUBST。

          我有一台带 SSD 驱动器的计算机,由于它只有 256GB,我决定不对其进行分区。但是我喜欢在 C 和 D 分区之间进行拆分,并通过 subst 命令在我的 SSD 驱动器上模拟它。如果我从使用 subst 命令创建的驱动器中提取文件,则 swf 上传不起作用。我几乎不敢相信,但这是我今天终于发现的事实,无法仅在我的开发计算机上上传文件。

          【讨论】:

            猜你喜欢
            • 2010-11-24
            • 2011-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-01
            • 2011-12-17
            • 1970-01-01
            相关资源
            最近更新 更多