2010-02-10 210 views
5

使用SWFUpload v2.2,Firefox 3,IE 8,Flash 10 在我的ASP.NET应用程序中,所有上传都由upload.aspx处理(我有正确的upload_url设置为设置对象)。在IE 8中,上传到upload.aspx页面并进行处理,但在Firefox中却没有。有什么建议么?SWFUpload适用于IE浏览器,但不适用于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> 

回答

1

使用HTTP跟踪/调试代理看看是否有什么实际上是被发送到服务器,并且正在接收什么响应(如果有的话)。查尔斯是我最喜欢的,并且在Flash(以及其他所有HTTP)方面效果很好。 WireShark和Fiddler是其他选项。

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

是Wireshark http://www.wireshark.org/

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

+0

查尔斯是一个很好的建议!使用Charles我能够确认没有任何内容被发送到服务器(所有请求都是GET)。现在我仍然试图找出原因!另外,查尔斯也没有IE的流量出现,所以我很难搞清楚POST的成功。查尔斯应该自动配置IE浏览器,它似乎是,但没有流量显示。 – Xolamee 2010-02-11 22:37:43

+0

IE和Firefox代理的工作方式不同。从我记得的地方,你必须专门打开IE浏览器的Windows代理服务器,如果你在本地开发,你需要关闭IE浏览器某处的设置,以“绕过本地主机代理”。 – 2010-02-11 22:46:17

+0

我刚刚意识到这是IE 7的一个已知问题,并且通过“http:// computername”而不是“http:// localhost”访问我的网站可以修复此行为。对IE和Firefox的运行扫描显示,它们都经历了完全相同的GET序列,但在Firefox中没有post.aspx文件,而在IE中有。谢谢你继续帮助我与这个山姆。有什么线索可以找到,这将暗示为什么Firefox不POST? – Xolamee 2010-02-11 23:06:25

2

我知道,它的旧的文章,但也许​​这将有助于解决一些人的问题,因为我有今天同样的问题。

我解决了这个问题不使用接线柱阵列,因为我不知道怎么了,并在调试这个脚本,但生成一个查询字符串

<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)&OtherID=(otherid)

这适用于所有浏览器下的保证。

+0

为什么你使用OtherID? – Thariama 2011-04-11 12:13:16

+0

它没有关系。我刚刚添加它作为例子。感谢您的注意。 – 2011-04-13 11:24:22

+0

所以这里重要的是使用use_query_string?我仍然不明白这是如何解决问题的。你能解释一下吗? – Thariama 2011-04-13 11:53:44

0

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

您可以尝试this StackOverflow question中的解决方案,或尝试使用类似'flash upload cookie'的搜索方式。

1

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

Cookie的问题

在Windows非IE浏览器的Flash Player插件(火狐,歌剧,Safari等)将发送IE的cookie无论使用哪种浏览器。这打破了许多服务器端脚本技术的认证和会话。

开发人员应该通过手动Session和身份验证cookie信息,并手动恢复会话在服务器端,如果他们想使用会话

SWFUpload的包中包含的变通示例代码PHP和ASP。净

=====一些实施过一次身份验证票证从那里会使事情做工精细

你也可以把它有条件的,这个认证仅适用于如果用户使用的是上传

然而,一些测试以确保身份验证cookie不会绕过网站的其他部分,这可能很重要,具体取决于您如何为此操作发布cookie。

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; } 
+0

谢谢你的伟大答案。我有一个错误,它会在IE8/9中正常上传,但在Firefox中,它会失败,说(在ASP.NET中)Request.Files集合是空的。添加CSS代码使其在Firefox中完美上传。 – 2012-02-27 18:10:05

1

只是想确认了同样的问题只是通过增加post_params变量SWFUpload的初始化固定。

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

我终于找到了答案。很久以来我一直在为此苦苦挣扎。不能相信这是答案。原因是SUBST。

我有一台SSD驱动器的计算机,因为它只有256GB,我决定不对它进行分区。不过,我喜欢分割C和D分区,我通过subst命令在我的SSD驱动器上模拟它。如果我从用subst命令创建的驱动器拾取文件,swf上传不起作用。我几乎无法相信这一点,但这是我最终发现的事实,无法仅在我的开发计算机上上传文件。

相关问题