springboot文件上传、下载使用ftp工具

首先在服务器搭建ftp服务

配置文件(在application.properties中)


# Single file max size
multipart.maxFileSize=100Mb
# All files max size
multipart.maxRequestSize=100Mb#ftp use
ftp.server = www.datasvisser.cn
ftp.port = 41023
ftp.userName = jntechFTP1
ftp.userPassword =MUMjh3E+*=aC4\0

工具类1

/*** ftp上传,并将访问地址和上传的文件返回给调用者* * @author Administrator**/
public class FtpUpload {/** private static String server = "www.datasvisser.cn"; //地址 private static* int port = 41023;//端口号 private static String userName = "jntechFTP1";//登录名* private static String userPassword ="MXUsssMjhssE+*=a3C4\\0";//密码*/ private static String ftpPath = "uploadFiles"; // 文件上传目录private static FTPClient ftpClient = new FTPClient();private static String LOCAL_CHARSET = "GBK";private static String SERVER_CHARSET = "ISO-8859-1";private final static String localpath = "F:/";//下载到F盘下private final static String fileSeparator = System.getProperty("file.separator");/*
*文件上传工具方法
*/public static boolean upload(MultipartFile uploadFile, HttpServletRequest request, String server, int port,String userName, String userPassword, Integer id) {boolean result = false;try {request.setCharacterEncoding("utf-8");ftpClient.connect(server, port);ftpClient.login(userName, userPassword);ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTP.BINARY_FILE_TYPE);mkDir(ftpPath);// 创建目录// 设置上传目录 mustftpClient.changeWorkingDirectory("/" + ftpPath);if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).LOCAL_CHARSET = "UTF-8";}String fileName = new String(uploadFile.getOriginalFilename().getBytes(LOCAL_CHARSET), SERVER_CHARSET);fileName = id + "-" + fileName;// 构建上传到服务器上的文件名 20-文件名.后缀FTPFile[] fs = ftpClient.listFiles(fileName);if (fs.length == 0) {System.out.println("this file not exist ftp");} else if (fs.length == 1) {System.out.println("this file exist ftp");ftpClient.deleteFile(fs[0].getName());}InputStream is = uploadFile.getInputStream();result = ftpClient.storeFile(fileName, is);is.close();} catch (IOException e) {result = false;e.printStackTrace();} finally {try {ftpClient.disconnect();System.out.println("上传完成。。。");} catch (IOException e) {e.printStackTrace();}}return result;}
/*
*文件下载工具方法
*/public static byte[] downFileByte(String remotePath ,String fileName,String server,int port,String userName,String userPassword) throws Exception {ftpClient.connect(server, port);ftpClient.login(userName, userPassword);ftpClient.enterLocalPassiveMode();if(remotePath!=null && !remotePath.equals("")){ftpClient.changeWorkingDirectory(remotePath);System.out.println("file success");}byte[] return_arraybyte = null;if (ftpClient != null) {try {FTPFile[] files = ftpClient.listFiles();for (FTPFile file : files) {String f=new String(file.getName().getBytes("iso-8859-1"),"utf-8");//防止乱码System.out.println(f);System.out.println(f.equals(fileName));if (f.equals(fileName)) {InputStream ins = ftpClient.retrieveFileStream(file.getName());//需使用file.getName获值,若用f会乱码ByteArrayOutputStream byteOut = new ByteArrayOutputStream();byte[] buf = new byte[204800];int bufsize = 0;while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {byteOut.write(buf, 0, bufsize);}return_arraybyte = byteOut.toByteArray();File localFile = new File(localpath +fileSeparator+ f);OutputStream is = new FileOutputStream(localFile);ftpClient.retrieveFile(f, is);is.close();byteOut.close();ins.close();break;}}} catch (Exception e) {e.printStackTrace();} finally {closeConnect();}}return return_arraybyte;}public static void closeConnect(){try{ftpClient.disconnect();}catch(Exception e){e.printStackTrace();}}/*** 选择上传的目录,没有创建目录* * @param ftpPath*            需要上传、创建的目录* @return*/public static boolean mkDir(String ftpPath) {if (!ftpClient.isConnected()) {return false;}try {// 将路径中的斜杠统一char[] chars = ftpPath.toCharArray();StringBuffer sbStr = new StringBuffer(256);for (int i = 0; i < chars.length; i++) {if ('\\' == chars[i]) {sbStr.append('/');} else {sbStr.append(chars[i]);}}ftpPath = sbStr.toString();// System.out.println("ftpPath:" + ftpPath);if (ftpPath.indexOf('/') == -1) {// 只有一层目录ftpClient.makeDirectory(new String(ftpPath.getBytes(), "iso-8859-1"));ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes(), "iso-8859-1"));} else {// 多层目录循环创建String[] paths = ftpPath.split("/");for (int i = 0; i < paths.length; i++) {ftpClient.makeDirectory(new String(paths[i].getBytes(), "iso-8859-1"));ftpClient.changeWorkingDirectory(new String(paths[i].getBytes(), "iso-8859-1"));}}return true;} catch (Exception e) {e.printStackTrace();return false;}}
}

工具类2

/*** 从配置文件里面获取值 通过key来获取value* @author Administrator**/
public class PropertiesUtil {private static Logger log=LoggerFactory.getLogger(PropertiesUtil.class);private static  Properties properties;private static final String name="application.properties";static {try {properties=new Properties();properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(name), "utf-8"));} catch (UnsupportedEncodingException e) {} catch (IOException e) {log.error("IOException"+e);}}public static String  getValue(String key) {String value=properties.getProperty(key).trim();if(value==null) {return null;}return value;}public static String  getValue(String key,String defaultvalue) {String value=properties.getProperty(key).trim();if(value==null) {value=defaultvalue;}return value;}
}

调用(此处为多文件上传)

 @RequestMapping(value = "/dsfps",produces="application/json;charset=UTF-8")public  ServerResponse dsfps(@RequestParam("file") MultipartFile file,HttpServletRequest request,Integer proBasicInforId,Integer userid,Integer deptid,Integer id,Integer psjg,String pszt,String pslx,String pssj,String psdd,String psyj){long ids= new Date().getTime();//时间戳.后缀 的文件List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");String filename=null;for (MultipartFile m:files) {FtpUpload.upload(m, request, PropertiesUtil.getValue("ftp.server"),Integer.parseInt(PropertiesUtil.getValue("ftp.port")),PropertiesUtil.getValue("ftp.userName"),PropertiesUtil.getValue("ftp.userPassword"), ids);filename= ids+"-"+m.getOriginalFilename()+","+filename;}return  proDemandProcessService.dsfps( proBasicInforId, userid, deptid, id, psjg, pszt, pslx, pssj, psdd, psyj,filename);}

文件下载

    /*** 文件的下载* @param filename* @return* @throws Exception*/@RequestMapping("/downFiles")public  ServerResponse  downFiles(String filename) throws Exception {String[] split = filename.split(",");for (String s:split) {System.out.println(s);if(s!=null){FtpUpload.downFileByte("uploadFiles",s,PropertiesUtil.getValue("ftp.server"),Integer.parseInt(PropertiesUtil.getValue("ftp.port")),PropertiesUtil.getValue("ftp.userName"),PropertiesUtil.getValue("ftp.userPassword"));}}return  ServerResponse.createBySuccess();}

前端页面

<input id="file" name="file" type="file" multiple="multiple" style="margin-left:20px;margin-top:10px;"/>

ajax调用传输数据(传输文件的同时,传输其他数据)

 var form = new FormData; var instrumentApplys=new Array();for(var i =0 ;i<document.getElementById("file").files.length;i++){                                         //创建一个FormData对象form.append('file',document.getElementById("file").files[i]);}form.append('pssj',$("#pssj").val());form.append('psjg',$('input[name="psjg"]:checked').val());form.append('psdd',$("#psdd").val());form.append('psyj',$("[name=psyj]").val());form.append('pszt',pszt);form.append('id',getUrlParam("id"));form.append('userid',getUrlParam("userid"));form.append('deptid',getUrlParam("deptid"));form.append('pslx',$("#pslx").val());form.append('proBasicInforId',getUrlParam("probasicinforid"));$.ajax({type: 'post',async: false,cache: false,url: urlPrev + "/proDemandProcess/dsfps",data: form,dataType: 'json',contentType: false,processData: false, success: function(res) {if(res.code == 0) {hintInfo("提交成功!!");} else {hintInfo("提交失败!!");}}});

另外一种前端页面显示下载弹出框

下载工具类
/*** ym下载工具类(前端页面显示下载)* @param remotePath* @param fileName* @param server* @param port* @param userName* @param userPassword* @param response* @return* @throws Exception*/public static byte[] downFileByte(String remotePath , String fileName, String server, int port, String userName, String userPassword, HttpServletResponse response) throws Exception {ftpClient.connect(server, port);ftpClient.login(userName, userPassword);ftpClient.enterLocalPassiveMode();if(remotePath!=null && !remotePath.equals("")){ftpClient.changeWorkingDirectory(remotePath);System.out.println("file success");}byte[] return_arraybyte = null;String localName = new String(fileName.getBytes("GB2312"), "ISO_8859_1");response.setContentType("application/octet-stream");response.setContentType("application/OCTET-STREAM;charset=UTF-8");response.setHeader("Content-Disposition","attachment;filename="+localName);if (ftpClient != null) {try {FTPFile[] files = ftpClient.listFiles();for (FTPFile file : files) {String f=new String(file.getName().getBytes("iso-8859-1"),"utf-8");//防止乱码if (f.equals(fileName)) {InputStream ins = ftpClient.retrieveFileStream(file.getName());//需使用file.getName获值,若用f会乱码//ByteArrayOutputStream byteOut = new ByteArrayOutputStream();OutputStream os=response.getOutputStream();byte[] buf = new byte[204800];int bufsize = 0;while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {os.write(buf, 0, bufsize);}os.flush();os.close();ins.close();break;}}} catch (Exception e) {e.printStackTrace();} finally {closeConnect();}}return return_arraybyte;}
controller中的代码
@RequestMapping("/downFiles")public  ServerResponse  downFiles(String filename, HttpServletResponse response) throws Exception {String[] split = filename.split(",");for (String s:split) {if(s!=null){FtpUpload.downFileByte("uploadFiles",s,PropertiesUtil.getValue("ftp.server"),Integer.parseInt(PropertiesUtil.getValue("ftp.port")),PropertiesUtil.getValue("ftp.userName"),PropertiesUtil.getValue("ftp.userPassword"),response);}}return  ServerResponse.createBySuccess();}
前端页面
<div style='margin-left:100px;'><a href='http://localhost:8081/proDemandProcess/downFiles?filename="+文件名+"'  style='color:blue;' download='+文件名+'>"+文件名+"</a></div>

springboot文件上传、下载使用ftp工具将文件上传至服务器相关推荐

  1. java上传文件到ftp_java实现文件上传下载至ftp服务器

    以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白. 环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档. ...

  2. 如何将网站上传到服务器空间,如何使用FTP工具将网站上传到虚拟主机空间

    原标题:如何使用FTP工具将网站上传到虚拟主机空间 搭建网站是一个比较复杂的过程,在做网站程序页面设计时,可能要考虑到一些相关的页面色彩搭配,在做整体网站框架时又可能需要考虑到整体布局,再如,搭建完成 ...

  3. ftp工具类:上传与下载文件

    准备工作 服务器已经配置好ftp服务 linux服务器搭建ftp服务: https://program.blog.csdn.net/article/details/88825921 需要用到的jar包 ...

  4. java ftp 大文件_用Java实现FTP批量大文件上传下载(二)

    2上传下载 文件的上传可以分成多线程及单线程,在单线程情况下比较简单,而在多线程的情况下,要处理的事情要多点,同时也要小心很多.下面是net.sf.jftp.net.FtpConnection的上传h ...

  5. maven 文件上传下载_使用Maven将文件上传和下载到S3

    maven 文件上传下载 多年来,我已经看到许多团队以许多不同的方式使用Maven. Maven可用于许多ci / cd任务,而无需使用额外的管道代码,或者可用于在运行某些测试之前准备开发环境. 通常 ...

  6. FTP上传下载及FTP不支持中文目录解决方法

    直接上代码: ftp上传文件. /** * 上传文件到ftp服务器 * @param host ftp服务器ip地址 * @param port ftp服务器端口号 * @param username ...

  7. 创建文件、文件上传下载、发送邮件附件以及文件点击预览功能(超详细注解)

    根据模板生成文件 @Overridepublic File exportStuFileExcelNew(Studengt student, Page<StuFile> page)throw ...

  8. 文件上传下载(2)_文件写入硬盘

    本系列博客汇总在这里:文件上传下载汇总汇总 目录 文件上传至服务器 文件上传至服务器 1.编写 jsp 页面 upload.jsp. 2.编写 servlet(FileUploadServlet),以 ...

  9. Springboot项目搭建有ftpClientPool的Ftp工具类

    1 前言 最近项目中用到了FTP,于是自己写了一个FTP工具类,现将其分享出来,供大家借鉴使用. FTP工具类的实现可以分为两部分: 基于apache commons-pool2的ObjectPool ...

最新文章

  1. RTFNet:基于可见光/红外图像的城市自动驾驶道路场景语义分割
  2. Thinkpad x230设置启动顺序
  3. 用电线来传网络信号的黑科技?AirGig究竟是什么
  4. Java中long和Long有什么区别
  5. ip地址开头结尾不能为0
  6. ubuntu中安装hadoop集群
  7. Linux开发环境搭建三 使用mount -t cifs 挂载windows共享目录方法与问题解决
  8. 关于内存的划分和传引用传参数的区别
  9. 用JWT来保护我们的ASP.NET Core Web API
  10. Jury Compromise POJ - 1015
  11. Spring MVC 3模板和Apache Tiles
  12. CodeForces 757B Bash's Big Day(线性筛)
  13. hibernate中对象的3种状态----瞬时态、持久态、脱管态
  14. 2015年《大数据》高被引论文Top10文章No.4——关于大数据交易核心法律问题 —— 数据所有权的探讨...
  15. c语言编译时间,C语言中关于时间的函数
  16. 工具----10、Backtrack的安装
  17. 阿里云盘 PC 版上线,百度网盘 SVIP 功能全免费
  18. 华为云devops认证考试课堂笔记4
  19. hfss史密斯图_这个史密斯圆图代表什么意思啊
  20. 干货!手把手教你搭建高可用架构

热门文章

  1. 软件自动化测试平台设计,软件自动测试平台的设计与实现
  2. 大规模集群全网数据备份解决方案
  3. 用Excel公式怎么在一列中查找是否存在某字符串
  4. set.seed的作用
  5. 【汽车接口、公共汽车类与载重卡车类】
  6. L3-第五章-动态规划-2657 二进制数字
  7. Nirvana NA公链 NAC公链的两面观
  8. codeforces 584A
  9. 金庸说的:人不要太牛逼
  10. VMware虚拟机安装Kali Linux操作系统