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);
}

ASP.NET MVC3 Uploadify - HTTP Error 500

您没有调试代码吗?你没有注意到当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