zoukankan      html  css  js  c++  java
  • 保存远程地址文件到本地

    今天做活动时遇到一个下载报名表的需求。感觉实现过程很有趣,记录一下。

    其中 Java 代码: 

    /**
         * @Description: 下载报名表
         * @Author: 作者
         * @CreateTime: 某年某月某日某时
         * @param remoteFilePath 远程文件路径
         * @param localPath 本地文件路径
         */
        public void downFile(String remoteFilePath, String localPath) {
            URL urlfile = null;
            HttpURLConnection httpUrl = null;
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            File f = new File(localPath);
            try {
                urlfile = new URL(remoteFilePath);
                httpUrl = (HttpURLConnection)urlfile.openConnection();
                httpUrl.connect();
                bis = new BufferedInputStream(httpUrl.getInputStream());
                bos = new BufferedOutputStream(new FileOutputStream(f));
                int len = 2048;
                byte[] b = new byte[len];
                while ((len = bis.read(b)) != -1) {
                    bos.write(b, 0, len);
                }
                bos.flush();
                bis.close();
                httpUrl.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                try {
                    bis.close();
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    如果抛出异常:

    java.io.FileNotFoundException: D:xxxyyy (拒绝访问。)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
    at java.io.FileWriter.<init>(FileWriter.java:73)

    原因在实例化 File file=new File(localPath); 的时候 localPath 是一个目录
    解决办法,将 localPath 具体到文件名字。

    后台接口是出来了,但是发现没解决实际问题。

    毕竟下载到本地哪个文件夹不能写死。还得需要 JS 来辅助帮助用户选择目录。

    下面是两种 JS 实现。

    第一种:

    <script> 
      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="t_screenshot_17616.jpg" id="DemoImg" border="0" onclick="SaveAs5(this.src)"> 

    第二种:

    <script> 
      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="../t_screenshot_17616.jpg" id="DemoImg" border="0"> 
    <a href="#" onclick="SaveAs5(document.getElementById('DemoImg').src)"> 点击这里下载图片 </a>

    这两种方式有个相同点 都是一样 low。并且也不是我想要的跟后台配合使用方式。

    我需要的是弹出用户可以选择文件夹目录窗口的 JS 方法,获取地址配合后台使用。

    。。。

    后来发现只需一行代码就可以解决,并且调用的是浏览器自身的下载方式。很完美。

    谷歌是直接在当前页面下载到固定目录。

    火狐是弹出一个可以选择目录的窗口,再点击保存。代码如下:

    <a href="url"></a>

    一个大写的囧,是我把问题复杂化了。

    接下来再附一个禁止跳转事件的 a 标签

    <a href="javascript:;" target="_blank">
  • 相关阅读:
    156. Binary Tree Upside Down
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    汉诺塔问题
    算法——二分搜索
    linux内核编程helloworld(中级)
    linux内核入门(1)——基本简介和编译
    linux网络编程概念(一)
    linux配置防火墙
  • 原文地址:https://www.cnblogs.com/libra0920/p/5405558.html
Copyright © 2011-2022 走看看