Как скачать файл из FileResult и привязать тег в MVC 5? - PullRequest
0 голосов
/ 29 июня 2018

ЭТО МОЙ ФАЙЛ ЗАГРУЗКА И КОД ЗАГРУЗКИ

 [HttpPost]
    public ActionResult Save(Rent Rent , FileUpload upload, HttpPostedFileBase file)
    {

        if (Rent.Id == 0)
            _Context.Rent.Add(Rent);

        else
        {
            var rentInDb = _Context.Rent.Single(c => c.Id == Rent.Id);

            rentInDb.tenantId = Rent.tenantId;
            rentInDb.unitId = Rent.unitId;
            rentInDb.startDate = Rent.startDate;
            rentInDb.endDate = Rent.endDate;
            rentInDb.Amount = Rent.Amount;
            rentInDb.leaseStatus = Rent.leaseStatus;


        }

            _Context.SaveChanges();

        var rent = _Context.Rent.Single(r => r.Id == Rent.Id);

        var up = Request.Files["file"];
        if (up.ContentLength > 0) {



            var fileName = Path.GetFileName(file.FileName);
            var guid = Guid.NewGuid().ToString();
            var path = Path.Combine(Server.MapPath("~/uploads"), guid + fileName);
            file.SaveAs(path);
            string fl = path.Substring(path.LastIndexOf("\\"));
            string[] split = fl.Split('\\');
            string newpath = split[1];
            string imagepath = "~/uploads/" + newpath;
            upload.length = imagepath;
            upload.Rent = rent;
            _Context.FileUpload.Add(upload);
            _Context.SaveChanges();

        }
        return RedirectToAction("leaseStatus", "Home");
    }


 public ActionResult Downloads(int id)
    {
        var fl = _Context.FileUpload.Where(f => f.rentId == id);
        var up = Request.Files["file"];




        return View(fl );
    }

public FileResult Download(string ImageName)
  {
          var FileVirtualPath = "~/uploads/" + ImageName;

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


}

ЭТО МОЙ ВИД !!

@model IEnumerable<mallform.Models.FileUpload>
@{
    ViewBag.Title = "Downloads";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Downloads</h2>


@foreach (var file in Model)
{
   

    

    <a href=@file.length target="_blank">Download</a>

}

ЭТО ПОКАЗЫВАЕТ СТАНДАРТ 404.0 И ИНОГДА ошибка скрытого элемента :( Пожалуйста, помогите. В моем коде это включает загрузку кода файла, затем происходит действие загрузки, которое приводит меня к представлению загрузки, и в представлении загрузки у меня есть ссылка для загрузки файла по результату файла. Но это всегда показывает мне ошибку. Скажите пожалуйста, есть ли проблема с путем или что происходит?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Код ошибки 404 означает, что URL не найден вашим тегом привязки. https://en.wikipedia.org/wiki/HTTP_404

Вам необходимо передать параметр ImageName из вашего тега привязки в контроллер. Вы можете сделать что-то вроде этого:

View

@model IEnumerable<mallform.Models.FileUpload>
@{
    ViewBag.Title = "Downloads";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Downloads</h2>


@foreach (var file in Model)
{

    @Html.ActionLink(
          "Download File",              // Anchor Text
          "Download",                   // Action Name 
          "Controller Name",            // Controller Name
           new {                 
                 ImageName= "Pass the value of imagename parameter"
               },
           null         // Html Attributes
          )
}

Контроллер

    public FileResult Download(string ImageName)
      {
     //var FileVirtualPath = "~/uploads/" + ImageName; 

    //If using Physical Path  
    //var FileVirtualPath = HttpContext.Current.Request.MapPath("~/uploads/" + ImageName); 

    //If using Virtual Path
     var FileVirtualPath = HttpContext.Current.Server.MapPath("~/uploads/" + ImageName);   

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

    }
0 голосов
/ 29 июня 2018

Файл Результат Действие должно быть таким.

public FileResult Download(string ImageName)
{

    byte[] fileBytes = System.IO.File.ReadAllBytes(Server.MapPath(@"~/uploads/"+ImageName));
   string fileName = "myfile."+Path.GetExtension(Server.MapPath(@"~/uploads/"+ImageName));
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);


}
...