最近碰到一个问题,就是实现调用FTP服务器免登陆下载在进行展示,在这里分享下源码,能帮助到你的请点个赞呐呐呐!

上源码+注释


import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import javax.servlet.ServletContext;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.struts2.ServletActionContext;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class FtpUatil {private String url;private String port;private String username;private String password;private String ftpMode;private String dir;private String config = "";private static String OS = System.getProperty("os.name").toLowerCase();private FTPClient ftpClient;public String getUrl() {return this.url;}public String getPort() {return this.port;}public String getFtpMode() {return this.ftpMode;}public void setFtpMode(String ftpMode) {this.ftpMode = ftpMode;}public FtpUtil() {this.ftpClient = new FTPClient();this.ftpClient.setBufferSize(1024);this.ftpClient.setControlEncoding("UTF-8");this.ftpClient.setDefaultTimeout(300000);this.ftpClient.setConnectTimeout(300000);this.ftpClient.setDataTimeout(300000);this.ftpClient.configure(getClientConfig());}public void getConn(String ftpConfig) {if (this.config.equals(ftpConfig)) {return;}System.out.println("reading FTP Config...");try {if (ftpConfig.indexOf("/", ftpConfig.indexOf("@")) == -1) {this.dir = "";this.port = ftpConfig.substring(ftpConfig.indexOf(":", ftpConfig.indexOf("@")) + 1, ftpConfig.length());} else {this.dir = ftpConfig.substring(ftpConfig.indexOf("/", ftpConfig.indexOf("@")) + 1, ftpConfig.length());this.port = ftpConfig.substring(ftpConfig.indexOf(":", ftpConfig.indexOf("@")) + 1,ftpConfig.indexOf("/", ftpConfig.indexOf("@")));}this.url = ftpConfig.substring(ftpConfig.indexOf("@") + 1,ftpConfig.indexOf(":", ftpConfig.indexOf("@") - 1));this.username = ftpConfig.substring(ftpConfig.indexOf("//") + 2,ftpConfig.indexOf(":", ftpConfig.indexOf("//")));this.password = ftpConfig.substring(ftpConfig.indexOf(":", ftpConfig.indexOf("//")) + 1,ftpConfig.indexOf("@"));} catch (Exception localException) {}if (this.dir.equals(""))this.config = ("ftp://" + this.username + ":" + this.password + "@" + this.url + ":" + this.port);else {this.config = ("ftp://" + this.username + ":" + this.password + "@" + this.url + ":" + this.port + "/"+ this.dir);}System.out.println(this.config);}private void ftpConnect(String url, String port, String username, String password) {System.out.println("连接" + this.config);try {this.ftpClient.connect(url, Integer.parseInt(port));boolean loginResult = this.ftpClient.login(username, password);int returnCode = this.ftpClient.getReplyCode();if ((loginResult) && (FTPReply.isPositiveCompletion(returnCode))) {System.out.println("ftp连接成功");if (this.ftpMode == "PORT") {this.ftpClient.enterLocalActiveMode();System.out.println("ftp连接进入主动模式(PORT)");} else {this.ftpClient.enterLocalPassiveMode();System.out.println("ftp连接进入被动模式(PASV)");}}} catch (IOException e) {e.printStackTrace();}}public void ftpDisconnect() {try {if (this.ftpClient.isConnected()) {this.ftpClient.logout();this.ftpClient.disconnect();System.out.println("关闭ftp连接");}} catch (IOException e) {e.printStackTrace();}}public boolean fileRename(String path, String oldName, String newName) throws IOException {if (!this.ftpClient.isConnected()) {ftpConnect(this.url, this.port, this.username, this.password);}System.out.println("文件重命名");this.ftpClient.changeWorkingDirectory(this.dir + path);return this.ftpClient.rename(oldName, newName);}public boolean fileDelete(String pathName) throws IOException {if (!this.ftpClient.isConnected()) {ftpConnect(this.url, this.port, this.username, this.password);}System.out.println("删除" + pathName);boolean returnMessage = this.ftpClient.deleteFile(this.dir + pathName);if (returnMessage) {System.out.println("删除成功!");}return returnMessage;}public ByteArrayOutputStream fileGet(String path, String fileName) {if (!this.ftpClient.isConnected())ftpConnect(this.url, this.port, this.username, this.password);try {this.ftpClient.setControlEncoding("GBK");this.ftpClient.setFileType(2);this.ftpClient.changeWorkingDirectory(this.dir + path);System.out.println("读取文件信息:" + path + "/" + fileName);InputStream ins = this.ftpClient.retrieveFileStream(fileName);ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len = ins.read(buffer)) > -1) {baos.write(buffer, 0, len);}baos.flush();ins.close();System.out.println("文件读取完成");return baos;} catch (NullPointerException e) {e.printStackTrace();System.out.println("文件不存在");return null;} catch (IOException e) {e.printStackTrace();System.out.println("文件读取发生错误");return null;} finally {ftpDisconnect();}}private static FTPClientConfig getClientConfig() {String sysType = null;if (isLinux())sysType = "UNIX";else if (isWindows()) {sysType = "WINDOWS";}FTPClientConfig config = new FTPClientConfig(sysType);config.setRecentDateFormatStr("yyyy-MM-dd HH:mm");return config;}private static boolean isLinux() {return OS.contains("linux");}private static boolean isWindows() {return OS.contains("windows");}/*** @param fileUrl * @param pdfFileName* @return*/public static String getExamPdf(String fileUrl, String pdfFileName) {//处理fileUrl为三部分:ftp地址,dir目录,文件名FtpUtil ftpUtil = new FtpUtil();//用户名密码是aa/bb   ftp端口号默认的是21(传输数据)String ftpConfig = "ftp://aa:bb@ip:21";//账户密码及ftp服务器ip+端口号ftpUtil.getConn(ftpConfig);String dir = fileUrl.substring(20, fileUrl.indexOf("pdfbg/") + 13); //fpt服务器文件目录//"/pathimages/pdfbg/2019-11/";String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);//fpt服务器文件名ByteArrayOutputStream fileData = ftpUtil.fileGet(dir, fileName);if (fileData == null) {return null;}ftpUtil.ftpDisconnect();BASE64Encoder encode = new BASE64Encoder();ServletContext servletContext = ServletActionContext.getServletContext();String path = servletContext.getRealPath("/bl_pdf");path = path + "/";//获取上下文bl_pdf文件夹的目录路径 Base64ToPdf(encode.encode(fileData.toByteArray()), pdfFileName, path);return path + pdfFileName + ".pdf";}/*** base64字符串转换成pdf* @param pdfStr        base64字符串* @param pdfFilePath  pdf存放路径* @param pdfName    pdf存放路径的文件名* @return* @author songhaibo*/public static boolean Base64ToPdf(String pdfStr, String pdfName, String pdfFilePath) {if (StringUtils.isBlank(pdfStr))return false;BASE64Decoder decoder = new BASE64Decoder();try {// Base64解码byte[] b = decoder.decodeBuffer(pdfStr);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {// 调整异常数据b[i] += 256;}}String fileName = pdfFilePath + pdfName + ".pdf";OutputStream out = new FileOutputStream(fileName);out.write(b);out.flush();out.close();return true;} catch (Exception e) {return false;}}public static void main(String[] args) {//测试下String newValue = "ftp://ip/pathimages/pdfbg/2019-11/1923152cg20191121032407.pdf";String uuid = UUID.randomUUID().toString().replaceAll("-", "");//返回下载好的PDF路径加文件名newValue = getExamPdf(newValue, uuid);System.out.println(newValue);}
}

实现FTP服务器免登陆下载PDF文件转base64在下载到本地|服务器相关推荐

  1. 无法检索文件服务器,无服务器快速无法检索pdf文件(base64编码)

    我已经建立了一个快速/无服务器应用程序来检索一个GET请求的PDF文件.但我只是检索一个损坏的repsonse pdf回应.我只是想知道如果我的设置是正确的,以实现正确的回应.无服务器快速无法检索pd ...

  2. 课堂派PDF文件下载教程 / 课堂派批量下载PDF文件 / 在课堂派下载老师上传的资料

    试了网上说的20多种方法,都没有下载成功,最后终于发现了一种实用的下载方法: 一.首先用谷歌浏览器打开课堂派(最好用谷歌),打开这个页面,点开文件 二.打开这个页面之后,在下面这个页面点击F12 三. ...

  3. PHP ajax 远程下载PDF文件保存在本地服务器

    在一些时候我们想ajax方式来保存一些PDF文件,尤其是它放在远程服务器上,并且是保存在我们自己的服务器上存储,这个时候我们需要写一段程序来帮助我们完成这个工作,本文介绍了PHP 远程下载PDF文件保 ...

  4. 安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开

    安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开 前提: 高版本想使用Uri.fromFile() file://的形式 需要在onCreate 或init方法中添加下面代码. ...

  5. Nginx配置文件目录实现pdf文件预览及下载

    默认情况下,通过nginx服务器来访问pdf文件,在浏览器上是会直接打开该pdf文件呈现内容的.如果想要访问pdf文件时,实现下载文件的效果,则需要在nginx服务端做一些配置. 以下配置只能下载 n ...

  6. java从页面下载pdf文件到本地

    java从页面下载pdf文件,strtus2为例,其他框架语法大致一样 直接上代码 这边我传了个参数 从数据库中查出来文件存在服务器的相对路径 页面 <button class="la ...

  7. 使用js直接下载pdf文件而不用在新的浏览器窗口打开

    最近接了一个需求,要求用户点击下载按钮后直接下载pdf文件,而不是打开一个新窗口,让用户再去手动保存. 接到需求后我立刻着手在网上查找文档,发现很多声称可以实现直接下载的方法都不行,只有下面这个方法成 ...

  8. php+预览和下载pdf文件,vue实现在线预览pdf文件和下载(pdf.js)

    最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件, ...

  9. 微信公众号内,实现下载 PDF 文件。

    背景:需要在 微信公众号 内实现,通过点击一个[下载PDF文件]按钮,预期将 PDF 文件下载到本地自行打印. 前言:首先,本文采用的是 配合 后端 的实现方案.后端 返回file文件,通过 a 链接 ...

最新文章

  1. 全球安全行业融资收购简报(2016年2月)
  2. mysql 5.7 marriadb_CentOS7下安装MySQL
  3. codeforces 383D
  4. 【正一专栏】马蓉到底对王宝强还有啥感情?
  5. Rest 微服务工程搭建03——工程重构
  6. 11种图像清晰度评价函数
  7. Eclipse 中修改java编译版本
  8. Emulator Error: Could not load OpenGLES emulati...
  9. PHP 中使用工厂模式
  10. activiti查询当前用户的任务列表
  11. tiny6410裸机编程-----Timer (1)
  12. jquery html5 ui框架,有哪些常用jQuery UI框架?
  13. 微信小程序 选项卡的简单实例
  14. Detecting Deep-Fake Videos from Appearance and Behavior
  15. 关于ubuntu自带英文版firefox浏览器,安装evernote剪藏插件总是登录到国际版及firefox插件无法下载
  16. Unity-黑暗之魂复刻-Lockon
  17. wos 文献被引_WoS和ESI数据库高被引论文的界定.pdf
  18. ContexIoT: Towards Providing Contextual Integrity to Appified IoT Platforms
  19. 留学生在英文写作中如何巧妙避免重复问题?
  20. optfine的jar文件打不开_mclauncherBN

热门文章

  1. VirtualBox下Ubuntu 20.04全屏显示
  2. read和fread有什么区别
  3. java 电梯类图,电梯控制系统(用UML图理解)
  4. tomcat配置url跳转_架构成长之路:还不清楚原理就晚了,Java技术大咖带你手写Tomcat...
  5. Chrome插件:请开始你的表演,smartUp手势骚操作
  6. 用topcoder准备cs 面试
  7. 【转载】世界十大名咖啡
  8. JS 中 replace 和 replaceAll 的区别?
  9. richTextBox相关操作
  10. Linux 操作系统的安装