ASP.NET MVC 5-尝试下载文件时没有发生任何事情
ASP.NET MVC 5-尝试下载文件时没有发生任何事情
我创建了一个asp.net mvc 5项目,某个时刻我想要下载文件,文件可以是任何类型,例如:\'pdf\'、\'doc\'、\'zip\'。\n我尝试了以下代码:\n
[HttpGet] [Route("Download")] public ActionResult DownloadFiles(string data)// data是文件所在文件夹的名称 { string pathFolder = $@"{db.GetDetails().PathToFolder}\{data}";//PathToFolder是根文件夹 if (Directory.Exists(pathFolder)) { string[] files = Directory.GetFiles(pathFolder); if (files.Length > 1) { using (ZipFile zip = new ZipFile()) { zip.AddDirectory(pathFolder); MemoryStream output = new MemoryStream(); zip.Save(output); return File(output, "application/zip", "zipfile.zip"); } } else if (files.Length == 1) { byte[] fileBytes = System.IO.File.ReadAllBytes(files[0]); string fileName = Path.GetFileName(files[0]); return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); } } return null; }
\njs代码:\n
$.ajax({ type: 'GET', url: '/controllerforexample/Download', data: { data: data }// 第一个data是动作中的变量,第二个data是一个文本。 });
\n但是什么都没有发生。\n有人知道可能是什么问题吗?\n谢谢,\nTal
问题原因:代码中返回的结果类型应该是FileResult而不是ActionResult。
解决方法:修改代码,将返回类型改为FileResult。
具体代码如下:
public FileResult Download() { string filePath = Server.MapPath("~/Files/sample.pdf"); string fileName = "sample.pdf"; byte[] fileBytes = System.IO.File.ReadAllBytes(filePath); return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); }
上述代码中,我们首先获取文件的路径和名称,然后使用`File`方法返回一个`FileResult`对象。在`File`方法中,我们传入文件的字节数组、文件的MIME类型和文件名作为参数。
这样,当用户访问该方法时,会下载指定的文件。