Как я могу удалить указанный c загруженный файл в mvc5? - PullRequest
0 голосов
/ 16 июня 2020

После загрузки файла я хотел бы иметь возможность удалить его. Я пробовал это делать, но получаю ошибку «Ресурс не найден». Кроме того, как я могу сделать кнопки редактирования для каждого файла из строки, чтобы загрузить лучшую версию указанного c файла? Может ли кто-нибудь мне помочь?

Это мой контроллер:

   public class FileUploadController : Controller
    {
        // GET: FileUpload
        public ActionResult Index()
        {
            var items = GetFiles();
            return View(items);
        }

        // POST: FileUpload
        [HttpPost]
        public ActionResult Index(HttpPostedFileBase file)
        {

            if(file != null && file.ContentLength > 0 )
                try
                {

                    string path = Path.Combine(Server.MapPath("~/Files"),
                        Path.GetFileName(file.FileName));

                    file.SaveAs(path);
                    ViewBag.Message = "File uploaded successfully";

                }
                catch(Exception ex)
                {
                    ViewBag.Message = "ERROR:" + ex.Message.ToString();
                }
            else
            {
                ViewBag.Message = "You have not specified a file.";
            }

            var items = GetFiles();

            return View(items);
            
        }


        public FileResult Download(string downloadedfile)
        {
            var FileVirtualPath = "~/Files/" + downloadedfile;

            return File(FileVirtualPath, "application/force-download", Path.GetFileName(FileVirtualPath));

        }
        private List <string> GetFiles()
        {

            var dir = new System.IO.DirectoryInfo(Server.MapPath("~/Files"));
            System.IO.FileInfo[] fileNames = dir.GetFiles("*.*");

            List<string> items = new List<string>();

            foreach (var file in fileNames)
            {
                items.Add(file.Name);
            }

            return items;

        }

        [HttpPost]
        public ActionResult Delete(string file)
        {
            file = Path.Combine(Server.MapPath("~/Files"), file);

            FileInfo fl = new FileInfo(file);

            if (fl != null)
            {
                System.IO.File.Delete(file);
                fl.Delete();

            }

            return View();

        }
  }
}

Это вид, единственная проблема с ним - раздел Удалить:

<h2> File Upload </h2>

@model List<string>

@using (Html.BeginForm("Index", "FileUpload", FormMethod.Post,
        new { enctype = "multipart/form-data" }))
{


    <label for="file"> Upload </label>
    <input type="file" name="file" id="file" />
    <br /><br />

    <input type="submit" value="Upload" />
    <br /><br />

    @ViewBag.Message

    <br />

    <h2>Documents list</h2>

    <table style="width:100%">
        <tr>
            <th> File Name </th>
            <th> Link  </th>
        </tr>

        @for (var i = 0; i <= (Model.Count) - 1; i++)
        {
        <tr>

            <td>@Model[i].ToString() </td>

            <td>@Html.ActionLink("Download", "Download", new { downloadedfile = Model[i].ToString() }) </td>

            <td>@Html.ActionLink("Delete", "Delete", new { deletedfile = Model[i].ToString() }) </td>
           


        </tr>

        }


    </table>
}

1 Ответ

0 голосов
/ 16 июня 2020

В форме, которую вы отправляете в метод удаления, нет ничего, указывающего на путь к файлу для удаления. У вас есть скрытый ввод для свойства Count, но если это был скрытый ввод с именем «file» и содержал значение пути для удаляемого файла, то он был бы опубликован.

Примечание, для безопасности причины, по которым вы, вероятно, НЕ хотите позволять людям просто указывать путь к любому файлу, и сервер удалит его. Это могло доставить вам массу неприятностей. Вероятно, вам следует сохранить запись базы данных с URL-адресом файла и идентификатором и отправить этот идентификатор на сервер и прочитать URL-адрес из базы данных, а затем удалить файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...