ASP NET MVC 5从服务器删除文件

时间:2014-03-26 03:08:15

标签: c# asp.net asp.net-mvc file-io asp.net-mvc-5

查看代码:

@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文件所需的语法。

以下是我在控制器中的代码的屏幕截图: enter image description here

UPPDATE:我已经让代码工作了,并在我的博客上创建了一个简单的代码示例,说明了我是如何工作的以及这个想法是如何产生的。 http://httpjunkie.com/2014/724/mvc-5-image-upload-delete/

6 个答案:

答案 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()

System.IO.File

尝试在MVC控制器中使用File API时使用完全限定名称。

答案 2 :(得分:5)

感谢@Damith's Answer

我创建了这个功能

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);

        }
}