Voir le code:
@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>
}
Code du contrôleur:
[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";
}
}
Où il est dit si (File.Exists) AND File.Delete, le code comporte des lignes ondulées en dessous. J'essaie donc de déterminer la syntaxe dont j'ai besoin pour que ce fichier soit supprimé.
Voici une capture d'écran de mon code dans le contrôleur:
UPPDATE: Le code fonctionne et crée un exemple de code simple sur mon blog, expliquant comment je le fais fonctionner et comment l'idée est née http://httpjunkie.com/2014/724/mvc-5 -image-upload-delete/
utiliser Request.MapPath
string fullPath = Request.MapPath("~/Images/Cakes/" + photoName);
if (System.IO.File.Exists(fullPath))
{
System.IO.File.Delete(fullPath);
}
File
, tel que vous l'utilisez, est ambigu, d'où la "ligne sinueuse". Le IDE ne peut pas résoudre ce que vous voulez dire;
System.Web.Mvc.Controller.File()
ou
Utilisez un nom complet lorsque vous essayez d'utiliser l'API de fichier dans un contrôleur MVC.
merci pour @ Réponse de Damith
J'ai créé cette fonction
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;
}
et voici une utilisation simple
RemoveFileFromServer("Content\img\ProfilePictures\User12.png");
Ajoutez using System.IO;
en haut de votre contrôleur.
vous pouvez également utiliser HostingEnvironment.MapPath
insted of Request.MapPath
Cet exemple me convient très bien:
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;
}