打开浏览器的另存为框方法总结

使用js打开文件另存为框:
有如下三种思路:
1.在客户端模拟一个a标签,然后打开
2.执行saveas命令
3.使用form标签,

思路一代码:
客户端代码:

function fake_click(obj) {
    if (document.createEventObject) {
        var ev = document.createEventObject();
        // IE浏览器支持fireEvent方法  
        obj.fireEvent(ev)

    }
    else {
        var ev = document.createEvent("MouseEvents");
        ev.initMouseEvent(
            "click", true, false, window, 0, 0, 0, 0, 0
            , false, false, false, false, 0, null
            );
        ev.stopPropagation();
        // 其他标准浏览器使用dispatchEvent方法  
        obj.dispatchEvent(ev);
    }
}

function export_raw(name, data) {
    //var urlObject = window.URL || window.webkitURL || window;
    //var export_blob = new Blob([data]);
    //var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
    var save_link = document.createElement("a");
    save_link.target = "_blank";
    save_link.href = data;
    save_link.download = name;
    fake_click(save_link);
}

服务端代码:

         Client c = new Client();
            StreamReaderX stream = c.OpenStreamReader(filename);
            if (stream == null)
            {
                Response.Write(string.Format("{0}文件在服务器上不存在。", filename));
                Response.End();
                return null;
            }

            Response.ContentType = string.Format("application/{0}", stream.FileInfo.hfsFileType);
            Response.AppendHeader("Content-Length", stream.Size.ToString());
            Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);

            int size = 64 * 1024;
            while (!stream.IsEnd && Response.IsClientConnected)
            {
                //stream.Read(pos,size);
                byte[] o = (byte[])stream.ReadX(size);
                Response.BinaryWrite(o);
                Response.Flush();
            }
            Response.End();
            return null;

这种方法在firefox/chrome/ie9以上,是没有问题的。但是在ie8中无法正常执行。


思路二代码:

客户端代码:
    <script type="text/javascript">
        function SaveAs5(imgURL) {
            var oPop = window.open(imgURL, "", "width=1, height=1, top=5000, left=5000");
            for (; oPop.document.readyState != "complete";) {
                if (oPop.document.readyState == "complete") break;
            }
            oPop.document.execCommand("SaveAs");
            oPop.close();
        }
    </script>
    <img src="Content/0.jpg"  id="DemoImg" border="0" onclick="SaveAs5(this.src)">

在chrome中,默认无法打开窗口


思路三代码:

客户端代码:

 var form = document.createElement("form");
    form.id = 'tempForm';
    form.action = APPPATH + "/" + imgURL;
    form.target = "_blank";
    form.method = "post";
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);

服务器端代码和上面类似

这个方法适合任何浏览器

原文地址:https://www.cnblogs.com/363546828/p/7122374.html