2

所以我试图用 Asp.NET MVC 实现 Uploadifive 1.0。使用调试器模式,我知道上传动作成功传递给Controller,Server变量也传递了。但是,HttpPostedFileBase 变量 fileData 始终为空。我在谷歌上到处找,找不到答案。我发现该变量必须称为 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);            
}

任何指针或帮助将不胜感激。我感到失落。

4

2 回答 2

1

我在 Uploadifive 上遇到了完全相同的问题,所以我在 Uploadify 论坛上的一个现有线程(可能是你的)上发帖。此后,作者发布了我下载的 Uploadifive 插件的更新,现在这对我来说很好用。事实上,它的工作方式与 Uploadify 过去在“Request.Forms”中包含可用的附加表单数据完全一样,并且它不再将“X_”添加到附加表单数据中。我建议您尝试新版本,看看您的情况如何。

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

于 2012-05-07T02:58:49.223 回答
0

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

Javascript:

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

C#控制器:

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

只要与fileObjNameC# 控制器中的参数名称相同,就可以了。我用各种名称对其进行了测试,如果名称不匹配,则参数为 null,当它们匹配时,它就像一个魅力。

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

于 2014-01-31T18:46:39.290 回答