资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

Java从FTP下载文件到本地前端+后端

Java 更新时间: 发布时间: 计算机考试归档 最新发布

Java从FTP下载文件到本地前端+后端

一、前端

  1. 1.首先创建下载文件按钮
  1. 2.其次编写手动触发事件
downloadFile(row){   this.axios.post("/Zlhzjbxxb/downloadFile", {wjdz:row.wjdz, wjmc:row.wjmc},{      headers: {   //解决后端接收时多了一个 =       'Content-Type': 'application/json'      }   }).then(res => {       this.$message.success("成功下载至桌面");      })}

        wjdz和wjmc是要传给后端的值。后端获取到文件的FTP路径的时候,路径末尾会莫名的多一个等于(=)的符号,反正我的是出现了,把headers加上就完美解决了

二、后端

        结尾处贴附后端全码

        1.用Map来接收前端传过来的数据

public void downloadFile(@RequestBody Map map) throws UnsupportedEncodingException {        String wjdz = map.get("wjdz");        String wjmc = map.get("wjmc");}

        2.获取的文件路径,比如C:UsersAdministratorDesktop,中间的 符号会被转义,所以需要转义回来,其它符号的转义可以百度一下哦。

//解决文件名中间的符号被转义(如“/”被转义成%2F)wjdz = wjdz.replaceAll("%(?![0-9a-fA-F]{2})", "%2F");String wjdzStr = URLDecoder.decode(wjdz, "UTF-8");

        3.在上传FTP文件的时候,为了防止重复的文件名在FTP服务器里出现,于是给每一个文件都设置了不同的文件编号,格式为xxx/2021-05-09/**************(*是uuid创建拼接在后面的),在FTP服务器里面下载文件的话需要找到具体的目录,然后再去下载具体的文件。接下来开始获取FTP文件的名称以及目录名

 //获取第一个“/”的位置int index = wjdzStr.indexOf("/");//获取第二个 “/” 的位置index = wjdzStr.indexOf("/", index + 1);//获取第二个 “/” 的位置后面的字符串String result = wjdzStr.substring(index + 1);//获取第二个 “/” 的位置之前的字符串String menuDz = wjdzStr.substring(0,index + 1);

        通过以上方式来获取文件的目录和文件名称,result就是需要下载文件的名称,menuDz就是文件所在的FTP服务器里面的目录

        4.接下来就是设置文件的保存地址了

FileOutputStream out = new FileOutputStream("C:UsersAdministratorDesktop" + wjmc )

        这里我是给设置到了桌面,后面的wjmc是该文件的中文名称,总不能给用户展示文件的路径吧......

        5.开始连接FTP服务器并且登录

FTPClient ftpClient = new FTPClient();ftpClient.connect(hostName, port);//连接ftpClient.login(userName, password);//登陆

        这里的hostname是自己的IP地址,port是端口号(默认21),userName是用户名,password就是密码了,如果在yml文件里面封装的有,便可以直接调用,没有就自己手动填上去也是一样的

        6.登上去之后便开始下载文件了,首先找到文件目录,然后再去下载

ftpClient.changeWorkingDirectory(menuDz);//切换目录//下载文件( 获取FTP服务器指定目录的文件)//参数result,服务器指定文件//参数out,本地输出流(负责下载后写入)ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);ftpClient.retrieveFile(result,out);

         ftpClient.setFileType这个就是用来配置文件传输形式的,默认ASCII,我们一般都是配置用二进制形式传送

        7.最后最后就是退出登录和关闭连接了

ftpClient.logout();// 退出登录ftpClient.disconnect();// 断开连接

        8.接下来就是后端的全码了

@PostMapping(value = "/downloadFile")@ResponseBodypublic void downloadFile(@RequestBody Map map) throws UnsupportedEncodingException {        String wjdz = map.get("wjdz");        String wjmc = map.get("wjmc");        //解决文件名中间的符号被转义(如“/”被转义成%2F)        wjdz = wjdz.replaceAll("%(?![0-9a-fA-F]{2})", "%2F");        String wjdzStr = URLDecoder.decode(wjdz, "UTF-8");        FTPClient ftpClient = new FTPClient();        int index = wjdzStr.indexOf("/"); //获取第一个“/”的位置        index = wjdzStr.indexOf("/", index + 1);//获取第二个 “/” 的位置        String result = wjdzStr.substring(index + 1);//获取第二个 “/” 的位置后面的字符串        String menuDz = wjdzStr.substring(0,index + 1);//获取第二个 “/” 的位置之前的字符串        try (FileOutputStream out = new FileOutputStream("C:UsersAdministratorDesktop" + wjmc )) {            FtpUtil ftpUtil = new FtpUtil();            ftpClient.connect(ftpUtil.hostName, ftpUtil.port);//连接            ftpClient.login(ftpUtil.userName, ftpUtil.password);//登陆            ftpClient.changeWorkingDirectory(menuDz);//切换目录            //下载文件( 获取FTP服务器指定目录的文件)            //参数result,服务器指定文件            //参数out,本地输出流(负责下载后写入)            ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);            ftpClient.retrieveFile(result,out);        } catch (SocketException e) {            e.printStackTrace();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                ftpClient.logout();// 退出登录                ftpClient.disconnect();// 断开连接            } catch (IOException e) {                e.printStackTrace();            }        }    }

        记录这些方便自己的同时也想能帮助一下和我遇到同样困惑的人,有什么不足或者不对的地方还望大佬们指出。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1098476.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【Java从FTP下载文件到本地前端+后端】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2