查看代码:
@if (File.Exists(Server.MapPath("~/Images/Cakes/" + Html.DisplayFor(modelItem => Model.CakeImage))))
{
@model TastyCakes.Models.Cakes
<form name="deletePhoto" action="/Cakes/DeletePhoto" method="post">
@Html.AntiForgeryToken()
File name of image to delete (without .jpg extension):
<input name="photoFileName" type="text" value="@Html.DisplayFor(modelItem => Model.CakeImage)" />
<input type="submit" value="Delete" class="tiny button">
</form>
} else {
<p>*File Needs to be uploaded</p>
}
控制器代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DeletePhoto(string photoFileName)
{
ViewBag.deleteSuccess = "false";
var photoName = "";
photoName = photoFileName;
var fullPath = Server.MapPath("~/Images/Cakes/" + photoName);
if (File.Exists(fullPath))
{
File.Delete(fullPath);
ViewBag.deleteSuccess = "true";
}
}
如果说(File.Exists)和File.Delete,代码下面有波浪线。所以我试图找出删除thif文件所需的语法。
以下是我在控制器中的代码的屏幕截图:
UPPDATE:我已经让代码工作了,并在我的博客上创建了一个简单的代码示例,说明了我是如何工作的以及这个想法是如何产生的。 http://httpjunkie.com/2014/724/mvc-5-image-upload-delete/
答案 0 :(得分:55)
使用Request.MapPath
string fullPath = Request.MapPath("~/Images/Cakes/" + photoName);
if (System.IO.File.Exists(fullPath))
{
System.IO.File.Delete(fullPath);
}
答案 1 :(得分:6)
File
,正如您正在使用它一样,含糊不清,因此是“波浪线”&#34;。 IDE无法解析您的意思;
System.Web.Mvc.Controller.File()
或
尝试在MVC控制器中使用File API时使用完全限定名称。
答案 2 :(得分:5)
我创建了这个功能
private bool RemoveFileFromServer(string path)
{
var fullPath = Request.MapPath(path);
if (!System.IO.File.Exists(fullPath)) return false;
try //Maybe error could happen like Access denied or Presses Already User used
{
System.IO.File.Delete(fullPath);
return true;
}
catch (Exception e)
{
//Debug.WriteLine(e.Message);
}
return false;
}
这是一个简单的用途
RemoveFileFromServer("Content\img\ProfilePictures\User12.png");
答案 3 :(得分:1)
在控制器顶部添加using System.IO;
。
答案 4 :(得分:0)
您还可以HostingEnvironment.MapPath
Request.MapPath
使用private bool DeleteFile(string image1_Address="")
{
try {
if (image1_Address != null && image1_Address.Length > 0)
{
string fullPath = HostingEnvironment.MapPath("~" + image1_Address);
if (System.IO.File.Exists(fullPath))
{
System.IO.File.Delete(fullPath);
return true;
}
}
}catch(Exception e)
{ }
return false;
}
。{
这个例子适合我:
$('tbody').children()[iRDG2].attr('id', fieldData[iRDG2].URN);
答案 5 :(得分:0)
假设您有一个名为PlacesController的控制器。在其中创建一个IHostingEnvironment对象并对其进行初始化。
private readonly TouristPlaceInformationContext _context; //database context object. not necessary for this solving current problem. but it is used for database queries.
private readonly IHostingEnvironment _he;
public PlacesController(TouristPlaceInformationContext context, IHostingEnvironment he)
{
_context = context;
_he = he;
}
在以下函数中,使用_he.WebRootPath获取直到“ wwwroot”文件夹的路径。使用_he.ContentRootPath获取直到项目根文件夹的路径。假设我们要在以下路径中删除文件:“ projectRoot / wwwroot / images / somefile.jpg”。以下功能将完成这项工作。
public void deleteFile(string filename){
String filepath= Path.Combine(_he.WebRootPath,"images", filename);
if (System.IO.File.Exists(prevFilePath))
{
System.IO.File.Delete(prevFilePath);
}
}