保存远程地址文件到本地

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

其中 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:\xxx\yyy (拒绝访问。)
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">

 

posted @ 2016-04-18 19:16  宁采桃花不采臣  阅读(1024)  评论(0编辑  收藏  举报