ASP.NET MVC3 Uploadify - HTTP Error 500
本文关键字:HTTP Error Uploadify NET MVC3 ASP | 更新日期: 2023-09-27 18:20:16
我似乎无法在ASP.NET MVC3上进行uploadify,我搜索了很多,下面的代码似乎很好,但对我来说不太好。当我尝试通过html上传方法上传时,它很好,而uploadify就不太好了。所有库都包含正确。
<!-- 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>
家庭控制器动作
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
var fileName = Path.GetFileName(file.FileName); // Object reference not set to an instance of an object. I get this if I try to upload via uploadify
file.SaveAs(Server.MapPath("~/upload/") + fileName);
return Content(fileName);
}
您没有调试代码吗?你没有注意到当Upload
动作被击中时,file
动作参数总是为null吗?您的操作参数称为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中对所有url都进行了硬编码。这是非常糟糕的,当您将应用程序部署到虚拟目录(例如IIS)中时,应用程序很可能无法工作。
在ASP.NET MVC中,在处理url时应该始终使用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