我已经采取了将文件上传到文件系统并将文件路径保存在数据库中的路线。
我已经通过
成功将图像文件上传到(“〜/ Content / images”+ fileName)string path = System.IO.Path.Combine(Server.MapPath("~/Content/images" +
fileName));
我已成功将文件路径保存到数据库。
auction.ImageURL = path;
但是图像没有渲染,经过检查,图像源网址反映了图像的绝对路径
C:\Users\cmazzochi81\Documents\Visual Studio\2015\Projects\MyAuctionApp\Content\images
发生了什么事?
控制器 -
[Authorize]
[HttpPost]
public ActionResult Create(Models.Auction auction, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
if (file != null)
{
string fileName = System.IO.Path.GetFileName(file.FileName);
string path = System.IO.Path.Combine(
Server.MapPath("~/Content/images" + fileName));
// file is uploaded
file.SaveAs(path);
var db = new AuctionsDataContext();
auction.ImageURL = path;
db.Auctions.Add(auction);
db.SaveChanges();
return RedirectToAction("Index");
}
}
return Create();
}
模型
[DataType(DataType.ImageUrl)]
[Display(Name = "image URL")]
public string ImageURL { get; set; }
视图 -
<img src="@auction.ImageURL" title="@auction.Title" />
答案 0 :(得分:1)
Server.MapPath
返回提供的虚拟路径的物理目录。如果您正在查找可在img src
属性中使用的文件夹的虚拟路径,则您将要使用VirtualPathUtility.ToAbsolute
。
由于听起来您想要保存文件(因此需要物理路径)并返回指向文件的链接(因此需要虚拟路径),因此您需要同时使用这两种文件。
if (ModelState.IsValid)
{
if (file != null)
{
string fileName = System.IO.Path.GetFileName(file.FileName);
string savePath = System.IO.Path.Combine(Server.MapPath("~/Content/images"), fileName);
string url = System.IO.Path.Combine(VirtualPathUtility.ToAbsolute("~/Content/images"), fileName);
// file is uploaded
file.SaveAs(savePath);
var db = new AuctionsDataContext();
auction.ImageURL = url;
db.Auctions.Add(auction);
db.SaveChanges();
return RedirectToAction("Index");
}