2010-01-16 186 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