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

    服务器端代码和上面类似

    这个方法适合任何浏览器

  • 相关阅读:
    监督学习——AdaBoost元算法提高分类性能
    监督学习——logistic进行二分类(python)
    监督学习——朴素贝叶斯分类理论与实践
    nrm 工具的使用
    Linux下安装MySQL
    Node环境配置
    07.移动端类库
    06.网页布局
    05.预处理器
    04.触屏事件
  • 原文地址:https://www.cnblogs.com/363546828/p/7122374.html
Copyright © 2011-2022 走看看