在ASP .NET MCV 1.0中上载文件时出错

时间:2015-12-16 03:24:32

标签: c# asp.net asp.net-mvc file-upload

这是我上传文件的控制器

控制器:

namespace MvcApplication5.Controllers

{
    public class DataUploadController : Controller
{

    public ActionResult Index()
    {
        return View("Index");
    }


    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Import(HttpPostedFileBase excelfile)
    {
        if (excelfile == null || excelfile.ContentLength == 0)
        {
            ModelState.AddModelError("empty", "some error message");
            return RedirectToAction("Index", "DataUpload");
        }
        else
        {
            if (excelfile.FileName.EndsWith(".xls") || excelfile.FileName.EndsWith(".xlsx"))
            {


                string path = System.Web.HttpContext.Current.Server.MapPath("~/Content/" + excelfile.FileName);

                if (System.IO.File.Exists(path))
                    System.IO.File.Delete(path);
                excelfile.SaveAs(path);
                return View("success");
            }
            else
            {
                return View("Index");
            }
        }
    }

}
}

当我执行代码时,我收到了这个错误:

'/'应用程序中的服务器错误。

'〜/ Content / C:\ Documents and Settings \ adryan \ My Documents \ test.xlsx'不是有效的虚拟路径。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

你能帮我解决问题吗?

2 个答案:

答案 0 :(得分:2)

您应该从文件路径中获取文件名。您可以使用Path.GetFileName方法来执行此操作。此方法返回指定路径字符串的文件名和扩展名。

string fileName = Path.GetFileName(excelfile.FileName);
string path = Path.Combine(Server.MapPath("~/Content"), fileName);
excelFile.SaveAs(path);

答案 1 :(得分:0)

此代码将抛出错误:

string path = System.Web.HttpContext.Current.Server.MapPath("~/Content/" + excelfile.FileName);

if (System.IO.File.Exists(path)) // <--- error here !
  

如何解决!

     

excelfile.FileName 这是 HttpPostedFileBase 的属性    excelfile ..这是一个 FilePath !你应该只使用string的分裂('\')方法获取文件名,LinQ获取最后一个索引

     

示例: excelfile.FileName.Split('\\').Last()

P.S。抱歉,我的英语&gt;。&lt; !

Holp这个帮助!