【问题标题】:ASP.NET MVC3 Uploadify - HTTP Error 500ASP.NET MVC3 Uploadify - HTTP 错误 500
【发布时间】:2012-01-15 15:52:01
【问题描述】:

我似乎无法在 ASP.NET MVC3 上进行上传,我搜索了很多,下面的代码似乎可以正常工作,但不适合我。当我尝试通过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);
}

【问题讨论】:

  • 抛出了什么异常?
  • 啊,可能是因为您用于 Uploadify 的输入字段的名称称为“file_upload”。您的操作需要“文件”(这是您在 html 版本中使用的名称)。可能会引发空引用异常。
  • 添加了异常,不,将其更改为“文件”,仍然发生同样的事情。

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


【解决方案1】:

你没有调试你的代码吗?您是否注意到Upload 操作被触发时,file 操作参数始终为空?您的操作参数称为file,因此您需要使用fileDataName 选项指定:

'fileDataName' : 'file',

默认uploadify使用Filedata,所以如果你不想指定这个名字你也可以调整你的action参数名字来匹配这个:

[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>

【讨论】:

    【解决方案2】:

    正在使用

    HttpPostedFileBase file = Request.Files[0]; 
    

    在我的控制器中使用 Uploadify

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多