使用最新的Uploadifive,使用Asp.Net MVC获取HttpPostedFileBase的Null值

时间:2012-05-01 21:51:52

标签: asp.net-mvc uploadify

所以我试图用Asp.NET MVC实现Uploadifive 1.0。使用调试器模式,我知道上传操作已成功传递给Controller,并且也传递了服务器变量。但是,HttpPostedFileBase变量fileData始终为null。我在谷歌上看到了无处可寻,无法找到答案。我发现变量必须被称为fileData。但这并没有帮助。

以下是视图的一部分:

<form action="<%: Url.Action("SaveFiles", "File") %>" enctype="multipart/form-data">
    <input type="file" name="file_upload" id="file_upload" />
</form>

<script type="text/javascript">
    (function ($) {
        $(document).ready(function () {
             $('#file_upload').uploadifive({
                 'method': 'post',
                 'uploadScript': 'SaveFiles',
                 'formData': {'path' : 'documents'}
             });
        });
    })(jQuery);
</script>

这是控制器动作:

[HttpPost]
public ActionResult SaveFiles(HttpPostedFileBase fileData)
{
    string uploadFolder = Request.ServerVariables.Get("HTTP_X_PATH");
    if(string.IsNullOrWhiteSpace(uploadFolder))
        return Json(JsonMessageManager.GetFailureMessage("No upload folder was selected"));

    if (fileData != null && fileData.ContentLength > 0)
    {
        var fileName = Path.GetFileName(fileData.FileName);
        var path = Path.Combine(Server.MapPath("~/Content/" + uploadFolder), fileName);
        fileData.SaveAs(path);
        return Json(true);
    }
    return Json(false);            
}

任何指针或帮助将不胜感激。我感到迷茫。

2 个答案:

答案 0 :(得分:1)

我和Uploadifive有完全相同的问题所以我在现有线程(可能是你的)上发布了Uploadify论坛。作者已经发布了我下载的Uploadifive插件的更新,现在这对我来说很好。实际上,它的工作方式与上传用于包含“Request.Forms”中可用的其他表单数据完全相同,并且不再将“X_”添加到其他表单数据中。我建议你试试新版本,看看你怎么做。

请参阅此处的讨论:http://www.uploadify.com/forum/#/discussion/8223/no-files-attached-to-request

答案 1 :(得分:0)

密钥不是命名变量'fileData',而是确保您的控制器和UploadiFive都认为它具有相同的名称。例如:

使用Javascript:

$(document).ready(function () { 
  $('#fileUploadDiv').uploadifive({
      'uploadScript': '/File/Upload',
      'fileObjName' : 'file'
  });
});

C#Controller:

    [HttpPost]
    public PartialViewResult Upload(HttpPostedFileBase file)
    {
        var name = file.FileName;
        var stream = file.InputStream;
        // etc...
    }

只要fileObjName与C#控制器中的参数同名,就应该没问题。我用各种名称对它进行了测试,如果名称不匹配,则参数为null,当它们匹配时,它就像魅力一样。

如果参数仍不起作用,您应该能够使用控制器内部的this.Request.Files访问数据。无论参数名称如何,看起来都是数据。