it-swarm.com.de

ASP NET MVC 5 Datei vom Server löschen

Code anzeigen:

@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>
}

Controller Code:

[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";
        }
}

Wo es heißt, wenn (File.Exists) AND File.Delete, enthält der Code untergeordnete Linien. Ich versuche also herauszufinden, welche Syntax ich brauche, um die Datei zu löschen.

Hier ist ein Screenshot meines Codes im Controller: enter image description here

UPPDATE: Ich habe den Code zum Laufen gebracht und in meinem Blog ein einfaches Codebeispiel darüber erstellt, wie ich ihn zum Laufen gebracht habe und wie die Idee zustande kam . http://httpjunkie.com/2014/724/mvc-5 -image-upload-delete/

14
Eric Bishard

verwenden Sie Request.MapPath

string fullPath = Request.MapPath("~/Images/Cakes/" + photoName);
if (System.IO.File.Exists(fullPath))
{
   System.IO.File.Delete(fullPath);
}
52
Damith

File ist, wie Sie es verwenden, mehrdeutig, daher die "wackelige Linie". Die IDE kann nicht auflösen, was Sie meinen. 

System.Web.Mvc.Controller.File()

oder

System.IO.File

Verwenden Sie einen vollständig qualifizierten Namen, wenn Sie versuchen, die Datei-API in einem MVC-Controller zu verwenden.

6
Tieson T.

danke für @ Damiths Antwort

Ich habe diese Funktion erstellt

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

und hier ist eine einfache Verwendung davon

RemoveFileFromServer("Content\img\ProfilePictures\User12.png");
4

Fügen Sie using System.IO; oben in Ihrem Controller ein.

1
Racil Hilan

Angenommen, Sie haben einen Controller namens PlacesController. Erstellen Sie ein IHostingEnvironment-Objekt und initialisieren Sie es.

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

Verwenden Sie in der folgenden Funktion _he.WebRootPath, um den Pfad zum Ordner "wwwroot" abzurufen. Verwenden Sie _he.ContentRootPath, um den Pfad zum Stammordner des Projekts abzurufen. Angenommen, wir möchten eine Datei im folgenden Pfad löschen: "projectRoot/wwwroot/images/somefile.jpg". Die folgende Funktion erledigt die Aufgabe.

public void deleteFile(string filename){
    String filepath= Path.Combine(_he.WebRootPath,"images", filename);
    if (System.IO.File.Exists(prevFilePath))
        {
             System.IO.File.Delete(prevFilePath);

        }
}
0
priojeet priyom

sie können auch HostingEnvironment.MapPath insted von Request.MapPath verwenden.

Dieses Beispiel funktioniert gut für mich:

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;
        }
0
Hamid