2010-01-16 185 views
2

我正在使用SWFUpload在ASP.NET MVC 1.0網站上進行文件上傳。它工作正常,但我無法驗證上傳方法。 HttpContext.User.Identity.Name返回一個空字符串。我假設這是因爲Flash電影正在發佈。我也使用這裏提供的包裝:http://blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/SWFUpload身份驗證

下面的控制器操作被觸發,但如上面提到的,用戶對象沒有通過。

任何幫助表示讚賞!

查看

HTML

  <form enctype="multipart/form-data" method="post" action="/Media/Upload/Photo"> 
       <input type="file" id="userPhoto_Photo" name="userPhoto_Photo" /> 
      </form> 

的Javascript

$(function() { 
     $("#userPhoto").makeAsyncUploader({ 
      upload_url: '/Media/Upload', 
      flash_url: '<%= Url.Content("~/Content/Flash/swfUpload-2.2.0.1.swf") %>', 
      file_size_limit: '1 MB', 
      file_types: '*.jpg; *.png; *.gif', 

      button_action: SWFUpload.BUTTON_ACTION.SELECT_FILE, 
      button_width: 210, 
      button_height: 35, 
      button_image_url: '<%= Url.Content("~/Content/Images/UploadPhoto.png") %>', 
      button_text: '', 
button_cursor: SWFUpload.CURSOR.HAND, 
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT 

     }); 
    }); 

控制器動作

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Upload() 
    { 
     if (Request.Files.Count == 1) 
     { 
      //Upload work 
     } 
     return RedirectToAction("Index", "Profile"); 
    } 

回答

2

這很容易通過傳遞一個post參數來解決,該參數是swfUpload API的一部分。傳遞用戶名或用戶ID然後使用表單身份驗證手動對動作進行身份驗證。

+2

我認爲你的方式可能會導致安全問題〜 – Maidot 2011-05-03 07:15:37

0

我相信這是因爲Flash在發出請求時不會持續瀏覽器會話。你將不得不以某種方式明確地通過閃存傳遞關於用戶會話的一些信息。

你可以這樣做的一種方法是設置一個cookie。讓JavaScript讀取cookie並將其傳遞給flash。然後讓Flash在上傳時發送它。這樣,你就不會在閃存變量中傳遞cookie值。

您是否使用Windows集成身份驗證?

2

你也應該看看這篇文章: http://trycatchfail.com/blog/post/2009/05/13/Using-Flash-with-ASPNET-MVC-and-Authentication.aspx
它完美地解釋了你需要做的,讓您的應用程序的安全,仍然使用Flash上​​傳插件,像Uploadify或SWFUpload的東西。

+0

這對我有效。我還必須確保我允許在web.config中對我的上傳url進行請求。授權屬性應該足夠了。 <位置路徑= 「成員/動作/ UploadImage」> <授權> <允許用戶= 「*」/> 2010-04-16 11:07:20