2014-03-26 3 views
11

Code anzeigen:ASP NET MVC 5 Delete Datei vom Server

@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) UND File.Delete, der Code Wellenlinien hat darunter. Also versuche ich herauszufinden, welche Syntax ich brauche, um diese Datei zu löschen. Hier

ist ein Screenshot von meinem Code in der Steuerung: enter image description here

UPPDATE: Ich habe den Code bekam arbeiten und erstellt ein einfaches Codebeispiel auf meinem Blog, wie ich habe es funktioniert und wie die Idee kam, . http://httpjunkie.com/2014/724/mvc-5-image-upload-delete/

+0

OK, mein filePath jetzt ist \ Images \ Kuchen \ StrawberryCheesecake.jpg.jpg so soll ich in der Lage sein, diese Funktion zu erhalten .. –

Antwort

35

Verwendung Request.MapPath

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

ich ein Bild veröffentlichen würde, was der Code sieht aus wie in der Steuerung mit diese Veränderungen. –

+0

OK überprüfen Sie das Bild und Sie werden meinen Fehler im Code sehen. Muss ich etwas anderes als File.Exists verwenden? –

+1

versuche ich mit 'System.IO.File.Exists' und' System.IO.File.Delete' – Damith

1

hinzufügen using System.IO; an der Spitze des Controllers.

+0

Ich habe das. Ich dachte dasselbe, aber ich glaube nicht, dass das Teil von System.IO ist. Wie auch immer, es zeigt immer noch skurrile Linien an der gleichen Stelle. –

+0

Ich werde das Bild in einer Sekunde ersetzen, wobei eine den Fehler zeigt –

5

File, wie Sie es verwenden, ist mehrdeutig, daher die "squiggly line". 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 beim Versuch, die Datei-API in einer MVC-Controller zu verwenden.

+0

Alle Squigglys sind weg, aber es löscht das Foto immer noch nicht. –

+0

@EricB Haben Sie versucht, das generierte HTML zu überprüfen, um sicherzustellen, dass das Formular wie erwartet erstellt wird? –

+0

Ich habe einige Session-Variablen hinzugefügt, um zu debuggen und herausgefunden, dass ich ".jpg" angehängt habe, als ich mir keinen Pfad von "Whatever.jpg.jpg" geben musste. Ich habe es repariert, danke für eure Hilfe! –

2

Dank für @Damith's Answer

habe ich diese Funktion

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 ein einfacher Gebrauch davon

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

Sie auch HostingEnvironment.MapPath insted Request.MapPath

Dieses Beispiel verwenden können 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; 
     }