js通過服務器相對路徑下載文件到本地

參考:js 下載文件 前端 後臺 處理

TXTUrl必須是相對路徑,如果採用絕對路徑會報錯。

function downloadFile(TXTUrl) {
    var SaveToolIframe = "<iframe class='onceSave' id='SaveIframe' style='display:none'src='" + TXTUrl + "'></iframe>";
    if ($("#SaveIframe").length == 0) {
        $("body").append(SaveToolIframe);
    } else {
        $("#SaveIframe")[0].src = TXTUrl;
    }
    var oFrm = document.getElementById('SaveIframe');
    oFrm.onload = oFrm.onreadystatechange = function () {
        if (this.readyState && this.readyState != 'complete') return;
        else {
            if ($(".onceSave").contents().attr("title").indexOf("404") >= 0)//文件未找到   根據404界面 標題確定錯誤
            {
                alert("沒有所下載的文件");
            }
        }
    }
}

實例:下載easyUI中datagrid中數據到excel

let rows = $("#dataanagrid-content-dg").datagrid("getRows");
let bodyData = JSON.stringify(rows);
let postData = {
    data: bodyData
};
$.ajax({
    url: '/Search/ExportExcel',
    type: "post",
    data: postData,
    success: function (data) {
        downloadFile(data);
    }
});

C#代碼

public string ExportExcel()
{
    string json = Request.Params["data"];
    DataTable dt = JsonToDataTable(json);
    string excelname = System.DateTime.Now.ToString("yyyyMMddhhmmss");
    List<ExportFieldParam> columns = new List<ExportFieldParam>();
    if (dt.Columns.Contains("噪音數據"))
    {
        columns.Add(new ExportFieldParam("傳感器", "傳感器", 300));
        columns.Add(new ExportFieldParam("時間", "時間", 150));
        columns.Add(new ExportFieldParam("值", "值", 40));
        columns.Add(new ExportFieldParam("單位", "單位", 40));
        columns.Add(new ExportFieldParam("噪音數據", "噪音數據", 60));
    }
    else
    {
        columns.Add(new ExportFieldParam("傳感器", "傳感器", 300));
        columns.Add(new ExportFieldParam("時間", "時間", 300));
        columns.Add(new ExportFieldParam("值", "值", 40));
        columns.Add(new ExportFieldParam("單位", "單位", 40));
    }
    string filePath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "/temp/" +"測站測計數據:"+ excelname + ".xls";
    MemoryStream ms = RenderDataTableToExcel(dt, columns) as MemoryStream;
    FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
    byte[] data = ms.ToArray();
    fs.Write(data, 0, data.Length);
    fs.Flush();
    fs.Close();
    data = null;
    ms = null;
    fs = null;
    return "/temp/" + "測站測計數據:" + excelname + ".xls";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章