2010-02-10 276 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上傳不起作用。我幾乎無法相信這一點,但這是我最終發現的事實,無法僅在我的開發計算機上上傳文件。

相關問題