c#asp.net MVC通过Ajax下载一个文件
本文关键字:一个 文件 下载 net MVC 通过 Ajax c#asp | 更新日期: 2023-09-27 18:24:32
我很确定这是不可能的,但我想我会问。。。
我有一个FileResult
,它返回一个文件,当它工作时没有问题。当FileResult
由于某种原因出现错误时,我想在用户屏幕上显示一条异常错误消息,最好是在弹出窗口中。
我可以做一个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);
});