web-dev-qa-db-ja.com

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)AND File.Deleteの場合、コードの下に波線があります。だから、ファイルを削除するために必要な構文を見つけようとしています。

これがコントローラーのコードのスクリーンショットです。 enter image description here

更新:コードが機能するようにし、ブログで簡単なコード例を作成しました。 http://httpjunkie.com/2014/724/mvc-5-image-upload-delete/

15
Eric Bishard

使用する Request.MapPath

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

使用しているFileは曖昧であるため、「波線」です。 IDEはあなたが意味するものを解決できません。

System.Web.Mvc.Controller.File()

または

System.IO.File

MVCコントローラー内でFile APIを使用する場合は、完全修飾名を使用してください。

6
Tieson T.

@ 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");
5

追加 using System.IO;コントローラーの上部。

1
Racil Hilan

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

        }
}
0
priojeet priyom