ASP.NET MVC3 Uploadify - HTTP错误500

问题描述:

我似乎无法在ASP.NET MVC3上使用uploadify,我搜索了很多,下面的代码似乎工作正常,但不适合我。当我尝试通过html上传方法尝试上传时,它起作用,与uploadify不同。所有库都包含在内。ASP.NET MVC3 Uploadify - HTTP错误500

<!-- Not working, HTTP ERROR 500 --> 
<input id="file" type="file" name="file" /> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#file_upload').uploadify({ 
      // I tried to remove "/" at the start, does not help 
      'uploader': '/Scripts/u/uploadify.swf', 
      'script': '/home/upload', 
      'cancelImg': '/Scripts/u/cancel.png', 
      'folder': '/upload', 
      'auto': true, 
      'onError': function (event, ID, fileObj, errorObj) { 
       alert(errorObj.type + ' Error: ' + errorObj.info); 
      } 
     }); 
    }); 
</script> 

<!-- Working fine --> 
<form action="home/upload" method="post" enctype="multipart/form-data"> 
    <label for="file">Filename:</label> 
    <input type="file" name="file" id="file" /> 
    <input type="submit" /> 
</form> 

首页控制器动作

​​
+0

什么异常正在抛出? – 2012-01-15 16:04:34

+0

啊,也许是因为您用于Uploadify的输入字段的名称被称为“file_upload”。您的操作需要“文件”(这是您在html版本中使用的名称)。空引用异常可能被抛出。 – 2012-01-15 16:09:03

+0

增加了异常和不,将其更改为“文件”,仍然发生同样的事情。 – sed 2012-01-15 16:11:04

没有调试代码?您没有注意到Upload动作被击中时file动作参数始终为空吗?你的行动的说法被称为file,所以你需要指定使用fileDataName选项:

'fileDataName' : 'file', 

默认情况下uploadify使用Filedata,所以如果你不想指定这个名字,你也可以调整你的行动参数名与此匹配:

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase fileData) 
{ 
    var fileName = Path.GetFileName(fileData.FileName); 
    fileData.SaveAs(Path.Combine(Server.MapPath("~/upload/"), fileName)); 
    return Content(fileName); 
} 

还要确保~/upload文件夹存在于您的服务器上。它不会在您创建新的ASP.NET MVC应用程序时出现。

我想指出你的代码的另一个问题是,你已经绝对硬编码在你的JavaScript的所有网址。这是非常糟糕的,并且可能会导致您的应用程序在虚拟目录中部署时无法工作,例如IIS。

在ASP.NET MVC使用URL打交道时,就像你应该总是使用网址助手:

<script src="@Url.Content("~/Scripts/u/jquery.uploadify.v2.1.4.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/u/swfobject.js")" type="text/javascript"></script> 

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

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#file_upload').uploadify({ 
      'uploader': '@Url.Content("~/Scripts/u/uploadify.swf")', 
      'script': '@Url.Action("upload", "home")', 
      'cancelImg': '@Url.Content("~/Scripts/u/cancel.png")', 
      'folder': '@Url.Content("~/upload")', 
      'auto': true, 
      'onError': function (event, ID, fileObj, errorObj) { 
       alert(errorObj.type + ' Error: ' + errorObj.info); 
      } 
     }); 
    }); 
</script> 

是在我的控制器使用

HttpPostedFileBase file = Request.Files[0]; 

与Uploadify