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

    服务器端代码和上面类似

    这个方法适合任何浏览器

  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/363546828/p/7122374.html
Copyright © 2011-2022 走看看