ASP.NET MVC3 Uploadify - HTTP错误500

时间:2012-01-15 15:52:01

标签: c# javascript asp.net asp.net-mvc-3 uploadify

我似乎'似乎在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);
}

2 个答案:

答案 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