最近项目上需要使用ftp服务器和第三方进行资源交互,于是写了个小demo记录下~
FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过HTTP协议下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。同时,它也是一个应用程序,用户可以通过它把自己的计算机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP服务的功能是实现完整文件的异地传输。(来自百度百科)
一直以为ftp服务器多级目录创建和java中目录创建一样,然而并不是滴~ 将文件hello.json上传至/home/upload/目录下步骤:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>
ftp: hostname: 172.16.1.1 port: 21 username: lizzy password: lizzy root-path: /upload/
package com.lizzy.common.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Data; @ConfigurationProperties(prefix = "ftp") @Data @Component public class FtpConfig { private String hostname; private Integer port; private String username; private String password; private String rootPath; }
private FTPClient getFTPClient() { FTPClient client = new FTPClient(); // 设置默认超时时间30s client.setDefaultTimeout(30000); // 设置链接超时时间 client.setConnectTimeout(30000); // 设置数据传输时间 client.setDataTimeout(30000); return client; }
/** * 上传文件至FTP服务器 * @param config ftp服务器配置 * @param path 相对目录(不包含根目录) * @param fileName 文件名 * @param is 文件流 */ public static void upload(FtpConfig config, String path, String fileName, InputStream is) { FTPClient client = getFTPClient(); try { // 连接服务器 client.connect(config.getHostname(), config.getPort()); // 登录 client.login(config.getUsername(), config.getPassword()); int reply = client.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { // 连接失败 client.disconnect(); log.info("FTP服务器配置链接失败!请检查配置:{}", config.toString()); return ; } // 设置被动模式,开通一个端口来传输数据 client.enterLocalPassiveMode(); // 切换到上传目录 final String filePath = config.getRootPath() + path; if (!client.changeWorkingDirectory(filePath)) { // 目录不存在则创建 String[] dirs = filePath.split("/"); for (String dir : dirs) { if (StringUtils.isEmpty(dir)) { continue ; } if (!client.changeWorkingDirectory(dir)) { client.makeDirectory(dir); client.changeWorkingDirectory(dir); } } } // 设置被动模式,开通一个端口来传输数据 client.enterLocalPassiveMode(); //设置上传文件的类型为二进制类型 client.setFileType(FTP.BINARY_FILE_TYPE); client.storeFile(fileName, is); log.debug("文件{}成功上传至FTP服务器!", filePath + "/" + fileName); client.logout(); } catch (IOException e) { log.info("FTP服务器配置链接失败!错误:{}", e.getMessage()); e.printStackTrace(); } finally { try { is.close(); if (client.isConnected()) { client.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } }
标签:demo,服务器,资源,文件,百度,百科,目录,home,系统 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。