这是我上传文件的控制器
控制器:
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");
}
}
}
}
}
当我执行代码时,我收到了这个错误:
2>'/'应用程序中的服务器错误。'〜/ Content / C:\ Documents and Settings \ adryan \ My Documents \ test.xlsx'不是有效的虚拟路径。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
你能帮我解决问题吗?
答案 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这个帮助!