如何删除mvc5中的特定上传文件?

问题描述 投票:0回答:1

上传文件后,我希望能够将其删除。我尝试这样做,但是出现错误“找不到资源”。另外,如何上传该行中每个文件的编辑按钮,以便上传特定文件的更好版本?有人可以帮我吗?

这是我的控制器:

   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>

            </tr>

        }


    </table>
}


@using (Html.BeginForm("Delete", "FileUploadController", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(model => model.Count)

    <button type="submit" class="btn btn-danger" value="Delete">Delete</button>
}
asp.net-mvc-5
1个回答
0
投票

在您要发布到delete方法的表单中,没有任何内容指示要删除的文件的路径。您确实具有Count属性的隐藏输入,但是如果这是一个名为“ file”的隐藏输入,并且包含要删除的文件的路径值,那么它将被发布。

注意,出于安全原因,您可能不想让人们将路径发布到任何文件,服务器将删除它。那会给您带来很多麻烦。您可能应该存储带有文件URL和ID的数据库记录,并将该ID发布到服务器,然后从数据库中读取URL,然后删除文件。

© www.soinside.com 2019 - 2024. All rights reserved.