ASP.NET MVC 5-尝试下载文件时没有发生任何事情

25 浏览
0 Comments

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

0
0 Comments

问题原因:代码中返回的结果类型应该是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类型和文件名作为参数。

这样,当用户访问该方法时,会下载指定的文件。

0