前端
function download_1(url) {
var arr = url.split('/');
var url = '/FileManagement/Accessory/DownloadFile?url=' + url;
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.onload = function () {
if (this.status === 200) {
var blob = this.response;
var reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64,可以直接放入a表情href
reader.onload = function (e) {
var a = document.createElement('a');
a.download = arr[arr.length - 1];//下载文件名
a.href = e.target.result;
$("body").append(a); // 修复firefox中无法触发click
a.click();
$(a).remove();
}
}
};
// 发送ajax请求
xhr.send()
}
后端
[HttpPost]
public void DownloadFile(string url)
{
string PassUrl = url;
string[] arr = PassUrl.Split('/');
string fileName = arr[arr.Length - 1];
string filePath = Server.MapPath("~/" + PassUrl);//路径
FileInfo fileinfo = new FileInfo(filePath);
Response.Clear(); //清除缓冲区流中的所有内容输出
Response.ClearContent(); //清除缓冲区流中的所有内容输出
Response.ClearHeaders(); //清除缓冲区流中的所有头
Response.Buffer = true; //该值指示是否缓冲输出,并在完成处理整个响应之后将其发送
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileinfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/unknow"; //获取或设置输出流的 HTTP MIME 类型
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); //获取或设置输出流的 HTTP 字符集
Response.TransmitFile(filePath);
Response.End();
}