2011-01-14 12 views
0

私はASP.NET MVC Webアプリケーションからuploadifyを使用して簡単なファイルのアップロードをしようとしています。 IE8では、正常に動作します。 FirefoxとChromeでは、決してコントローラのアクションに投稿されないようです。誰かが私が間違っていることを見つけるのを助けることができますか?ここでFirefoxやChromeで私の仕事をアップロードしないのはなぜですか?

は私のhtmlです:

<input type="file" id="file_upload" name="FileData" /> 

私はjQueryの1.4.1とそれ自体がswfobject 2.2が含まれてuploadify 2.1.4の現在のバージョンの内容を含めています。ここで

は私のスクリプトです:

$(関数(){

$("#file_upload").uploadify({ 
    'uploader': '/Scripts/uploadify.swf', 
    'script':  '/Uploads/UploadFile', 
    'cancelImg': '/Content/Images/cancel.png', 
    'auto':  true, 
    'multi':  false, 
    'folder':  '/uploads', 

    onComplete : function() { 
    alert("complete"); 
    }, 

    onOpen : function() { 
    alert("open"); 
    }, 

    onError : function (event, id, fileObj, errorObj) { 
    alert("error: " + errorObj.info); 
    } 

}); 

});

そして、ここでは私のコントローラのアクションです:ChromeとFirefoxので

public string UploadFile(HttpPostedFileBase FileData) 
{ 
    // do stuff with the file 
} 

、私はGoogleで見つけることができるものから、かなり不可解なようで、「エラー#2038」というメッセージを、取得します。私は間違って何をしていますか?

+0

とエラーメッセージが出ないこれは私が進める方法ですか? –

+0

エラーメッセージは、onErrorコールバックのerrorObjにあります。 –

答えて

3

物事をしようとする:

  1. お使いのコントローラのアクションがのActionResult、
  2. Fiddlerをインストールして、カバーの下に何が起こるか見ていない文字列を返す必要があります(HTTPリクエスト/レスポンスフレームと可能なエラーが表示されます) 。次に、さまざまなブラウザ間で結果を比較して、何かが変化しているかどうかを確認します。解決するにはクリス・ファーマーは、セッションはフラッシュ要求で異なっている、言ったように、クッキー.ASPXAUTH(または他のセッションクッキー)はChromeとFirefoxで送信されません
+1

ありがとう...私は以前これを見るために、フィドラーを使用しようとしていたが、私はコントローラにポストを気づかなかった。ローカルホストのリクエストをログに記録する方法を読み終えた後、これは認証の問題であることが明らかになりました。なぜなら、ASP.NETセッションはフラッシュリクエストでは標準のブラウザベースのリクエストとは異なるからです。ありがとう! –

+0

これはどのように修正しましたか?私は同じ問題を抱えています。私のコードはIEで動作しますが、FirefoxとChromeでは動作しません。 –

+0

これを修正した方法についての解決策を投稿してください。類似の問題を抱えているすべての人に本当に便利です。 – ZVenue

0

(あなたがFiddler2をでこれを見ることができます)

この問題は、 "scriptData"をuploadifyで使用することができます。

string scriptDataValues = string.Empty; 
      if (Request.Cookies != null && Request.Cookies.Length > 0) 
      { 
       // Generate scriptData 
       scriptDataValues = ", 'scriptData' : {"; 
       string[] formatedData = new string[Request.Cookies.Length]; 
       int i = 0; 
       foreach (HttpCookie cookie in cookies) 
       { 
        // Format cookie to scriptData name:value 
        formatedData[i] = string.Format("\"{0}\":\"{1}\"", cookie.Name, cookie.Value); 
        i++; 
       } 
       // separate all formated cookies with comma 
       scriptDataValues += string.Join(",", formatedData); 
       scriptDataValues += "}"; 
      } 
    // add scriptData to your js script 
    string yourScript = "<script type=\"text/javascript\"> 
$(document).ready(function() { $('#file_upload').uploadify({ 
     'uploader' : '/uploadify/uploadify.swf', 
     'script'  : '/uploadify/uploadify.php', 
     'cancelImg' : '/uploadify/cancel.png', 
     'folder'  : '/uploads' 
     " + scriptDataValues + " 
    }); }); 
</script>" 

をそしてあなたのコントローラであなたのアクションで:

あなたuploadify JSにこれを追加します。

[HttpPost] 
     public ActionResult UploadProductImage(HttpPostedFileBase image, FormCollection collec) 
     { 
      Partner partner = null; 
      if (!string.IsNullOrEmpty(collec[".ASPXAUTH"])) 
      { 
       // Get cookie in POST values 
       FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(collec[".ASPXAUTH"]); 
       if (ticket.Expiration > DateTime.Now) 
       { 
        // Authenticated user, upload the file and return url 
       } 
      } 
     return this.Content(string.Empty); 
     } 
関連する問題