在同网段条件下可以通过FTP协议传输文件。
搭建FTP服务器
将文件夹作为ftp服务器,这个目录中的文件可以通过ftp协议下载上传。
ftp工具类
public class FTPUtils {
/**
* 向FTP服务器上传文件
*
* @param host FTP服务器ip
* @param port 端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param basePath FTP服务器基础目录
* @param localFilePath 上传到FTP服务器上的文件路径
* @param uploadFilePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为uploadBasePath+uploadFilePath
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String host, int port, String username, String password, String basePath, String localFilePath, String uploadFilePath) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
//本地要上传的文件的 输入流
InputStream input = new FileInputStream(new File(localFilePath));
int reply;
ftp.connect(host, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(uploadHost)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.enterLocalPassiveMode();
//切换到上传目录
try {
if (!ftp.changeWorkingDirectory(basePath + uploadFilePath)) {
//如果目录不存在创建目录
String[] dirs = uploadFilePath.split("/");
String tempPath = basePath;
for (String dir : dirs) {
if (null == dir || "".equals(dir))
continue;
tempPath += "/" + dir;
if (!ftp.changeWorkingDirectory(tempPath)) {
if (!ftp.makeDirectory(tempPath)) {
return result;
} else {
ftp.changeWorkingDirectory(tempPath);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
//设置上传文件的类型为二进制类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//上传文件
String filename = "defaultName.xlsx";
if (localFilePath.contains("/")) {
filename = localFilePath.substring(localFilePath.lastIndexOf("/") + 1);
}
if (localFilePath.contains("\\")) {
filename = localFilePath.substring(localFilePath.lastIndexOf("\\") + 1);
}
if (!ftp.storeFile(filename, input)) {
return result;
}
input.close();
ftp.logout();
result = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return result;
}
/**
* 从FTP服务器下载文件
*
* @param host FTP服务器ip
* @param port 端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param remotePath FTP服务器上的相对路径
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @return
*/
public static boolean downloadFile(String host, int port, String username, String password, String remotePath, String fileName, String localPath) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(host, port);
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
File localFile = new File(localPath + "/" + ff.getName());
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
}
}
ftp.logout();
result = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return result;
}
}
测试
public class FtpController {
// 从yml文件中获取ftp配置
@Value("${ftp.host}")
private String host;/*FTP服务器ip*/
@Value("${ftp.port}")
private int port;/*FTP服务器端口*/
@Value("${ftp.username}")
private String username;/*FTP登录账号*/
@Value("${ftp.password}")
private String password;/*FTP登录密码*/
@Value("${ftp.base-path}")
private String basePath;/*FTP服务器基础目录*/
@Value("${ftp.file-path}")
private String filePath;/*FTP服务器下级目录*/
@RequestMapping(value = "/upload",method = RequestMethod.POST)
public boolean testUploadFile(){
String fileName = "D:\\Java Code\\testmaven00\\src\\main\\java\\com\\test01Excel\\excel\\testExcel06.xlsx";
boolean b = FTPUtils.uploadFile(host, port, username, password, basePath, fileName, filePath);
return b;
}
@RequestMapping(value = "/download",method = RequestMethod.POST)
public boolean testDownloadFile(){
String localFilePath = "D:/Java Code/testmaven00/src/main/java/com/test04FTP/excel";
// String remotePath = "/ftp/hzx";
String remoteFileName = "testExcel06.xlsx";
boolean b = FTPUtils.downloadFile(host, port, username, password, basePath+filePath, remoteFileName, localFilePath);
return b;
}
}
ftp:
host: 192.168.0.30
port: 21
username: FTPUser
password: 123456
base-path: /ftp
file-path: /hzx