一、创建Docker镜像

docker pull vsftpd

二、创建Docker容器

docker run -d -p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-v /home/ftp:/home/vsftpd -e FTP_USER=ftpUsr -e FTP_PASS=123456 \
-e PASV_ADDRESS=192.168.0.10 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd

三、配置maven插件

<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId>
</dependency>

四、设置工程的配置项

user:document-host: 192.168.0.10document-ftp-port: 21document-ftp-username: ftpUsrdocument-ftp-password: 123456document-path: /document#回显地址document-ftp-httpPath: ftp://192.168.0.10
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {private String documentHost;private String documentFtpPort;private String documentFtpUsername;private String documentFtpPassword;private String documentPath;private String documentFtpHttpPath;}

五、连接到FTP

private FTPClient connectFtpServer() {// 创建FTPClient对象(对于连接ftp服务器,以及上传和上传都必须要用到一个对象)FTPClient ftpClient = new FTPClient();// 设置连接超时时间ftpClient.setConnectTimeout(1000 * 30);// 设置ftp字符集ftpClient.setControlEncoding("utf-8");// 设置被动模式,文件传输端口设置,否则文件上传不成功,也不报错ftpClient.enterLocalPassiveMode();try {// 定义返回的状态码int replyCode;// 连接ftp(当前项目所部署的服务器和ftp服务器之间可以相互通讯,表示连接成功)
//          ftpClient.connect(userConfig.getDocumentHost());if (StringUtils.isBlank(userConfig.getDocumentFtpPort())) {ftpClient.connect(userConfig.getDocumentHost());} else {ftpClient.connect(userConfig.getDocumentHost(), Integer.parseInt(userConfig.getDocumentFtpPort()));}// 输入账号和密码进行登录ftpClient.login(userConfig.getDocumentFtpUsername(), userConfig.getDocumentFtpPassword());//切换目录ftpClient.changeWorkingDirectory(userConfig.getDocumentPath());// 接受状态码(如果成功,返回230,如果失败返回503)replyCode = ftpClient.getReplyCode();// 根据状态码检测ftp的连接,调用isPositiveCompletion(reply)-->如果连接成功返回true,否则返回falseif (!FTPReply.isPositiveCompletion(replyCode)) {log.info("connect ftp {} failed", userConfig.getDocumentHost());
//              说明连接失败,需要断开连接ftpClient.disconnect();return null;}log.info("replyCode:" + replyCode);} catch (IOException e) {log.error("connect fail:" + e.toString());return null;}return ftpClient;}

六、判断文件是否存在

FTPFile[] li = ftp.listFiles(fileName);
Boolean b = (li !=null) && (li.length >0);

七、下载文件核心代码

public void downloadDocument(String filename, OutputStream out) {FTPClient ftp = connectFtpServer();try{ftp.setFileType(FTPClient.BINARY_FILE_TYPE);ftp.enterLocalPassiveMode();ftp.retrieveFile(filename, out);// commons-net提供的下载Ftp文件并写入输出流的方法。ftp.logout();} catch (Exception e) {log.error("FTP文件下载失败!" + e.toString());} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {log.error(ioe.toString());}}}}

或:

public void downloadDocument(String filename, OutputStream out) {FTPClient ftp = connectFtpServer();try{ftp.setFileType(FTPClient.BINARY_FILE_TYPE);ftp.enterLocalPassiveMode();/* 控制流量,从而控制下载速度 */InputStream is = null;is  = ftp.retrieveFileStream(filename);byte[] buffer = new byte[1024];int len = is.read(buffer);while (len != -1) {out.write(buffer, 0, len);len = is.read(buffer);}is.close();ftp.logout();} catch (Exception e) {log.error("FTP文件下载失败!" + e.toString());} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {log.error(ioe.toString());}}}}

八、VUE 展示其内容于页面上

<template>
<div><Table class="Ttable"border:columns="columnData":data="datas":ellipsis="true":loading="tableLoading"><Tooltipslot-scope="{ row, index }"slot="action"content="点击显示文件内容"transfer><Icontype="md-list-box":size="24"@click="showDocument(row)"/></Tooltip><Page v-if="pageObj.total >1":total.sync="pageObj.total":current="pageObj.pageIndex":page-size="pageObj.pageSize"transfershow-total show-sizer:styles="{marginLeft:'14px'}"@on-change="changPage"@on-page-size-change="changPageSize"/></Table><Modal v-model="showDocumentModal" footer-hide width="80%" :mask-closable="false" ><dl v-html="doccumentHtml" /><Affix slot="close" ref="documentCloserRef" offset-top="88" :style="{scrollLeft:'92% !important'}" ><Tooltip content="关闭"  ><Icon :color="'#ff9900'" size="40" type="ios-close-circle" /></Tooltip></Affix></Modal>
</div>
</template><script>
import {StringUtils} from "@/libs/StringUtil";export default {name: "ProceedingsDocuments",components: {},data(){return{datas:[],/*** 表头*/columnData:[{title: "序号",type: 'index',width: 100,align: 'center',sortable: true,className: "table-column-middle",},{【其他业务字段】},{title: "详情",slot: "action",align: "center",},],tableLoading:false,/*** 分页参数*/pageObj:{total:0,pageSize:10,pageIndex:1,},showDocumentModal: false,doccumentHtml: ''}},methods:{【……】,/*** 打开文书*/showDocument(rowInfo) {let _this = this;let documentId = '';if(rowInfo!=null && (rowInfo.documentId!=null) ){documentId = rowInfo.documentId;}if(StringUtils.isNotEmpty(rowkey) && (rowInfo.documentExistence)){this.$api.postDownloadFile('/data/download/document',{documentId},function (resp){var reader = new FileReader();reader.onload = function(event){var content = reader.result;//内容就在这里let pureContent = _this.purifyContent(content);_this.doccumentHtml = pureContent;_this.$set(_this.$refs.documentCloserRef.styles,'left','89%');_this.$nextTick(()=>{_this.showDocumentModal = true;});};reader.readAsText(resp);},e=>{console.error(e);});}else{this.$message.warning('对不起,无法将文件打开。');}},purifyContent(content) {let pureContent = '';try {【对文档的内容的后续整理】} catch (e) {console.error(e);}return pureContent;},},mounted() {……;}
}
</script><style scoped>
.Ttable {color: #515a6e;text-align: center;width: 1047px;
}
</style>

Springboot 通过Ftp协议下载文件,并在Vue平台上显示其内容相关推荐

  1. (需求实战_01)_shell脚本 ftp协议下载文件

    文章目录 一.需求文档说明 二.脚本解释/说明 三.脚本内容 3.1. 案例脚本 3.2. 案例脚本升级 一.需求文档说明 序号 要求 说明 ① 协议 使用ftp协议远程下载 ② 文件类型 .zip ...

  2. 从FTP服务器下载文件部署更新linux服务器上的服务

    作为软件测试人员,经常要发布开发的集成包.本来嘛,更新个服务,没什么大不了.但是集成包打出来,要更新的服务有9个(分别部署在三台服务器上),并且以后还会增加.如果手动更新,每次更新时间都得20分钟以上 ...

  3. 基于FTP协议的文件传输与下载

    目录 一.FTP协议: 二.文件上传: 1.连接服务器 2.登录操作 3.上传操作 三.文件下载 1.连接服务器 2.登录操作 3.下载操作 四. 总结: 一.FTP协议: ftp是(File Tra ...

  4. 基于FTP协议实现文件上传与下载

    目录 一.FTP简介 二.关于FTP服务器 三.文件上传 分步讲解: 完整实现代码: 四.下载文件 分步讲解: 完整实现代码: 小结 一.FTP简介 FTP(File Transfer Protoco ...

  5. CentOS6中连接ftp服务器下载文件时出现了java.net.SocketException: Connection reset

    问题描述:连接CentOS6中的ftp服务器下载文件时出现了java.net.SocketException: Connection reset 解决办法: 1.查看防火墙状态,发现防火墙已开启 se ...

  6. 如何登陆FTP服务器下载文件

    如何登陆FTP服务器下载文件 在网上我们经常可以看到很多如何搭建FTP服务器的经验,但是却缺少详细的如何登陆FTP服务器的经验,当然对于电脑熟练者来说这可能很简单,但是我想也有相当一部分人不知道如何从 ...

  7. linux中如何用ftp命令下载文件,linux中ftp下载文件命令的用法

    linxu下的ftp命令是用来下载文件或者上传文件的,下面由学习啦小编为大家整理了linux的ftp下载文件命令的用法的相关知识,希望对大家有帮助! 一.linux中的ftp下载文件命令的用法 从远程 ...

  8. 在linux系统,用FTP工具下载文件

    在linux系统,用FTP工具下载文件 有两种方式: 1. 打开终端,使用ftp命令连接到ftp 服务器如ftp 192.168.1.9 ,然后输入用户名密码,进入服务器后,用get命令下载你要下的文 ...

  9. python下载文件传到服务器_python实现从ftp服务器下载文件

    代码之余,将代码过程重要的一些代码段备份一下,如下的代码内容是关于Python从ftp服务器下载文件的的代码,希望能对小伙伴有用途.#coding=utf-8 ''' ftp自动下载.自动上传脚本,可 ...

最新文章

  1. 知乎13万赞!为何很多名校毕业生,都输在了人生后半程
  2. vue开发使用vue-particles如何兼容IE11?
  3. Node.js-sublime text3 配置node.js(ERROR: The process node.exe not found.)
  4. zabbix3.0安装过程记录
  5. ieee文章作者对不齐怎么办呢?
  6. 使用git下载giuhub中的项目
  7. ConcurrentHashMap的源码分析-put方法第三阶段
  8. matlab安装程序无法启动jvm_天呀!JVM居然还有2两种运行模式
  9. DBeaverEE 21.1.0安装指南
  10. 已知圆心,半径,角度,求圆上的点坐标
  11. Python资源下载
  12. 2019年博客之星评选活动之晋级TOP20博主名单
  13. 新加坡政府开放数据门户网站
  14. 自助破解winrar
  15. 微信小程序 开发 “婚礼邀请函” 微信小程序入门可看
  16. Django分布式路由
  17. Hash表_拉链法_开放寻址法_模拟散列表
  18. 利用SOP激活沉默用户
  19. 2020新春战疫ctf公益赛——Misc套娃
  20. CodeChef MONOPLOY Gangsters of Treeland

热门文章

  1. 这家简历大数据公司被“一锅端” 或因私自抓取用户简历:曾获李开复投资
  2. 苹果iOS 13概念曝光 音量UI大改鼠标即时配对
  3. 软件测试基础课程学习笔记6--测试执行的几点技巧
  4. WPF如何给窗口设置透明png的图片背景
  5. flutter 的gradle下载不了怎么办
  6. Android MediaCodec 解码H264码流播放
  7. Android 用MediaCodec ,MediaExtractor解码播放MP4文件
  8. java mvc tomcat_Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)
  9. 【算法】逆波兰式(后缀表达式)的计算 中缀表达式转后缀表达式(逆波兰式)
  10. 【Elasticsearch】估算在 Elasticsearch 中存储文档的成本