将Var传递给MVC中的文件上传方法

时间:2016-01-06 19:54:42

标签: c# asp.net-mvc controller

我有一种上传文件的方法,该文件是我的解决方案的标准配置。但是,我找不到如何将文件传递给另一个方法。

这是我的代码:

var file = Request.Files[0];

if (file != null && file.ContentLength > 0)
{
         _fileName = new FileController().UploadFile(file, "Tickets", ticketReturn.TicketNumber.ToString());
}



public string UploadFile(File file, string SubPath, string folder)
{


      var fileName = Path.GetFileName(file.FileName);

      string path = ConfigurationManager.AppSettings["MediaFolder"] + "\\" + SubPath + "\\" + fileName;

      var FullPath = Path.Combine(Server.MapPath("~/Images/"), fileName);

      file.SaveAs(fullPath);


      return fileName;
}

我遇到的问题是我无法将var传递给方法,所以我尝试传递一个文件,但这给了我一个错误,说明没有重载方法有这些参数。如何更改它以便我可以传入文件?

1 个答案:

答案 0 :(得分:3)

您在UploadFile()方法中使用了错误的参数类型。

Request.Files集合中的项目属于HttpPostedFileBase,而非File。因此,请更新您的方法以使参数具有正确的类型。

public string UploadFile(HttpPostedFileBase file, string SubPath, string folder)
{
   //do something with the file now and return some string
}

此外,我不太清楚为什么要创建FileController()的新对象。(你是从另一个控制器调用它吗?)如果两种方法都在同一个class,您只需调用方法而无需创建新对象。

public ActionResult CreateUserWithImage()
{
   if (Request.Files != null && Request.Files.Count>0)
   {
        var f = Request.Files[0];
        UploadFile(f,"Some","Abc");
   }
   return Content("Please return something valid here");
}      

private string UploadFile(HttpPostedFileBase file, string SubPath, string folder)
{
   //do something with the file now and return some string
}

如果从不同的控制器操作调用此方法,则应考虑将此UploadFile方法移动到可从任何所需控制器使用的其他公共类( UploadManager.cs?)( 您可以通过依赖注入或最坏情况注入它,根据需要在控制器中手动创建此新类的对象)。你不应该从另一个控制器调用一个控制器。