zoukankan      html  css  js  c++  java
  • 打开浏览器的另存为框方法总结

    使用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);

    服务器端代码和上面类似

    这个方法适合任何浏览器

  • 相关阅读:
    第1章 游戏之乐——NIM(3)两堆石头的游戏
    NFS介绍和安装
    shell脚本删除N天前的目录-----附linux和mac上date命令的不同
    关于子线程更新UI
    WIN7下安装SVNserver端及client搭建协作环境
    Selenium_WebDriver登录模拟鼠标移动切换窗体等操作练习(cssSelector初练手)_Java
    UICollectionView具体解释
    局域网使用的IP地址范围
    hdu 2955 Robberies
    POJ 1661 Help Jimmy(DP,注意边界)
  • 原文地址:https://www.cnblogs.com/363546828/p/7122374.html
Copyright © 2011-2022 走看看