我是第一次在网络服务器上传MVC网站。除文件上传选项外,一切运行良好。每当我尝试上传文件时,它都会提示我这个错误:
SaveAs方法配置为需要根路径和路径 ''没有扎根。
错误详细信息以某种方式显示了我在本地计算机上创建的项目路径。
System.Web.HttpException(0x80004005):已配置SaveAs方法 要求一个有根的道路,以及路径''没有扎根。在 Printrpk.Controllers.ProductController.Create(ProductModels product) 在 C:\项目\卡丁车\卡丁车\卡丁车\ \控制器ProductController.cs:行 145
我尝试了多种方法来检查我的代码是否错误,但我无法使其正常工作。
这是我在创建操作
下编写的内容foreach (string fileName in Request.Files)
{
HttpPostedFileBase file = Request.Files[fileName];
fName = file.FileName;
if (file != null && file.ContentLength > 0)
{
var originalDirectory = new DirectoryInfo(string.Format("{0}images", Server.MapPath(@"/")));
var pathString = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ProductImages");
var filename = Path.GetFileName(file.FileName);
bool isExists = System.IO.Directory.Exists(pathString);
if (!isExists)
{
System.IO.Directory.CreateDirectory(pathString);
}
path = string.Format("{0}//{1}", pathString, filename);
file.SaveAs(path);
}
}
当我不上传任何图像时,此控制器工作正常。我已经检查了我的web.config,它已经指向web-server。
这包含在Create
视图
<input name="file" type="file" multiple />
此外,我的基本文件夹中已有目标文件夹
答案 0 :(得分:3)
使用Server.MapPath()
获取与虚拟路径对应的物理路径。假设您的应用包含名为Images
的文件夹,其中包含名为ProductImages
的子文件夹,那么
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/ProductImages"), fileName);
file.SaveAs(path);
附注:考虑向POST方法添加参数IEnumerable<HttpPostedFileBase> file
,以便它与所选文件绑定(或者更好,将其作为视图模型中的属性包含在内)而不是使用Request.Files
< / p>