c#asp.net MVC通过Ajax下载一个文件

本文关键字:一个 文件 下载 net MVC 通过 Ajax c#asp | 更新日期: 2023-09-27 18:24:32

我很确定这是不可能的,但我想我会问。。。

我有一个FileResult,它返回一个文件,当它工作时没有问题。当FileResult由于某种原因出现错误时,我想在用户屏幕上显示一条异常错误消息,最好是在弹出窗口中。

我可以做一个Ajax帖子,成功时返回一个文件,如果不成功则显示一条消息吗?

c#asp.net MVC通过Ajax下载一个文件

我认为这是不可能的,因为为了处理ajax post,您必须在客户端编写一个javascript处理程序,而javascript不能在客户端执行文件IO。

不过,您可以做的是,发出ajax请求来检查文件是否存在并且可以下载。如果没有,则对该请求作出否定响应,这将在客户端弹出一个对话框。如果成功,请发出文件下载请求。

与MVC无关,但。。。

它可以使用XMLHttpRequest和新的HTML5File System API来完成,后者允许您处理二进制数据(在您的情况下从http响应获取)并将其保存到本地文件系统。

请参阅此处的示例:http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-示例保存映像

控制器(MyApiController)代码:

public ActionResult DownloadFile(String FileUniqueName)
    {
        var rootPath = Server.MapPath("~/UploadedFiles");
        var fileFullPath = System.IO.Path.Combine(rootPath,FileUniqueName);
        byte[] fileBytes = System.IO.File.ReadAllBytes(fileFullPath);
        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, "MyDownloadFile");
    }

Jquery代码:

$(document).on("click"," a ", function(){ //on click of anchor tag
                var funame=$(this).attr('uname'); /*anchor tag attribute "uname" contain file unique name*/
                var url = "http://localhost:14211/MyApi/DownloadFile?FileUniqueName= " + funame;
                window.open(url);

            });