[jQuery][MVC]使用post下載檔案

使用jquery + post下載檔案

通常下載檔案的方式,都是直接放一個link,就直接下載了,例如以下範例

View

@Html.ActionLink("下載檔案", "Download", new { type = "1"})

Action

public ActionResult Download(string type)
{
    string fileName = string.Empty;

    if (type.Equals("1"))
    {
        fileName = @"D:\Sample.rar";
    }
    else
    {
        fileName = @"D:\Sample2.rar";
    }

    return File(fileName, "application/x-rar-compressed","檔案.rar");            
}
這樣一般下載的功能就做好了,再來我們開啟chrome開發工具,看此request header

用Get的方式,且後面有帶查詢條件,表示網址會有log紀錄,如果後面帶的查詢條件是一些機敏資料,例如身分證...,這些都會存在網址log裡面,會有資安問題。

為了避免發生資安問題,可以改用jQuery post的方式下載檔案。

實作方式

  1. 建立一個iframe

  2. 建立一個表單(form),target 指向iframe

  3. 使用jquery submit 建立的表單

如以下範例

View


查詢條件: <input type="text" id="type"/>
<input type="button" value="下載檔案" id="DownloadBtn"/>

<iframe name="DownLoadiFrame" width="0" height="0"></iframe>

<form target="DownLoadiFrame" id="DownLoadForm" action="@Url.Action("Download")" method="post">
    <input type="hidden" name="type" />
</form>

<script>

    $(function () {        
        $("#DownloadBtn").click(function () {
            var form = $('#DownLoadForm');
            form.find('input[name=type]').val($('#type').val());
            form.submit();
        });
    });

</script>

 

用此方式,可以保護機敏資料不被紀錄。

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。