我似乎'似乎在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);
}
答案 0 :(得分:4)
你没有调试你的代码吗?在file
操作被点击时,您是否注意到Upload
操作参数始终为空?您的操作参数名为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时总是使用url helper,就像那样:
<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>
答案 1 :(得分:0)
使用
HttpPostedFileBase file = Request.Files[0];
在我的控制器中使用Uploadify