简体   繁体   English

如何从FileResult和MVC 5中的定位标记下载文件?

[英]How To Download A file From FileResult and anchor tag in MVC 5?

THIS IS MY FILE UPLOAD AND DOWNLOAD CODE 这是我的文件上传和下载代码

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


}

THIS IS MY VIEW !! 这是我的看法!

 @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> } 

THIS SHOWS STANDARD 404.0 AND SOMETIME hidden element error :( Please help. In my code it includes the upload a file code, then there Is a download action which leads me to download view and In download view, I have a link to download the file by file result. But It always shows me an error. Please tell me if there is an issue with the path or what is going on? 此显示标准404.0有时会隐藏元素错误:(请帮忙。在我的代码中,它包含上载文件的代码,然后有一个下载操作使我下载视图,在下载视图中,我有一个下载文件的链接按文件结果显示,但它总是显示错误,请告诉我路径是否有问题或发生了什么?

File Result Action should be like this. File Result Action应该是这样的。

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


}

Error Code 404 means the url is not found by your anchor tag. 错误代码404表示您的定位标记未找到该网址。 https://en.wikipedia.org/wiki/HTTP_404 https://zh.wikipedia.org/wiki/HTTP_404

You need to pass ImageName parameter from your anchor tag to the controller. 你需要从你的锚标记控制器通过ImageName参数。 You can do something like this: 您可以执行以下操作:

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

Controller 控制者

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

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM