Java 使用ftp的方式上传文件到linux,并实现删除,下载

连接条件:1.主机
2.端口(注意端口不是22,22为ssh默认端口,一般为21,或者20)
3.用户名和密码
一切准备就绪,执行代码发现执行失败报530错误,拒绝连接
错误分析:
  1. 用户名或者密码错误
  2. linux没有安装ftp,或者ftp没有启动。ps -ef | grep ftp
  3. linux默认root用户没有权限
修改方式:1. vi /etc/vsftpd/ftpusers 将root那一行注释
2.vi /etc/vsftpd/user_list 将root那行注释
4.service vsftpd restart 重启服务
 
然后,运行代码,发现返回230,证明连接linux成功
执行代码,向linux上传文件发现返回值为false
查看错误原因以及描述:ftp失败不会报任何异常
要注意使用System. out.println(ftpClient.getReplyCode());
System. out.println(ftpClient.getReplyString());
勤看返回代码以及原因描述。
执行代码发现,上传失败,错误代码425
第一步: ftpClient.enterLocalPassiveMode();
将ftp上传的模式变为被动模式
执行代码,发现还是失败,查看错误码为553
解决办法:1、设置selinux
vi /etc/sysconfig/selinux
将其中的SELINUX=enforcing改为SELINUX=disabled
 
2、设置如下
setsebool -P allow_ftpd_full_access 1
 
 
 
执行代码,问题解决。
 
 
 
上传文件还有sftp:顾名思义,s为安全,sftp比ftp安全好多,但是效率比ftp低好多,具体看需求选择方式
上代码;
 
 
 
 
 
package com.example.demo.linux.test;
 
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
import java.io.*;
import java.net.SocketException;
 
 
public class FtpUtils {
 
/**
* Description: 向FTP服务器上传文件
* @param host FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param basePath FTP服务器基础目录
* @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String host, int port, String username, String password, String basePath,
String filePath, String filename, InputStream input) {
//创建ftp客户端
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding( "UTF-8");
 
 
try {
//链接ftp服务器
ftpClient.connect(host, port);
//登录ftp
ftpClient.login(username, password);
int reply = ftpClient.getReplyCode();
System. out.println(reply);
//如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限下面有详细的解释。
if (!FTPReply. isPositiveCompletion(reply)) {
ftpClient.disconnect();
return false;
}
ftpClient.setFileType(FTPClient. BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode(); //设置ftp为被动模式
 
if(ftpClient.changeWorkingDirectory(basePath)){
String[] split = filePath.split( "/");
for (String s : split) {
ftpClient.makeDirectory(s);
ftpClient.changeWorkingDirectory(s);
 
}
} else{
return false;
 
}
 
 
 
// ftpClient.makeDirectory("path");//在root目录下创建文件夹
//ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
// ftpClient.enterLocalPassiveMode();
System. out.println(ftpClient.getReplyCode());
System. out.println(ftpClient.getReplyString());
boolean b = ftpClient.storeFile(filename, input); //文件你若是不指定就会上传到root目录下
System. out.println(ftpClient.getReplyCode());
System. out.println(ftpClient.getReplyString());
System. out.println(b);
 
 
// ftpClient.makeDirectory("abc");
String s = ftpClient.printWorkingDirectory();
System. out.println(s);
FTPFile[] ftpFiles = ftpClient.listDirectories();
for (FTPFile ftpFile : ftpFiles) {
System. out.println(ftpFile.getName());
}
input.close();
ftpClient.logout();
if(b){
return true;
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally
{
if (ftpClient.isConnected())
{
try
{
ftpClient.disconnect();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
 
}
return false;
}
 
/**
* Description: 从FTP服务器下载文件
* @param host FTP服务器hostname
* @param port FTP服务器端口
* @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) {
//创建ftp客户端
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding( "UTF-8");
try {
//链接ftp服务器
ftpClient.connect(host, port);
//登录ftp
ftpClient.login(username, password);
int reply = ftpClient.getReplyCode();
System. out.println(reply);
//如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限下面有详细的解释。
if (!FTPReply. isPositiveCompletion(reply)) {
ftpClient.disconnect();
return false;
}
ftpClient.setFileType(FTPClient. BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode(); //设置ftp为被动模式
if (ftpClient.changeWorkingDirectory(remotePath)) {
 
} else {
return false;
 
}
// ftpClient.deleteFile("");删除文件
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile ftpFile : ftpFiles) {
if (ftpFile.getName().equalsIgnoreCase(fileName)) {
File localFile = new File(localPath + "/" + fileName);
 
OutputStream is = new FileOutputStream(localFile);
boolean b = ftpClient.retrieveFile(ftpFile.getName(), is);
if (b) {
return true;
}
is.close();
}
}
ftpClient.logout();
 
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
 
}
return false;
}
 
 
 
 
}
 
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现从前端上传和下载PDF文件到FTP服务器,可以使用Java编程语言和FTP客户端库。 首先,需要在前端创建一个文件上传表单,并设置相应的文件选择按钮、提交按钮和处理逻辑。用户选择要上传的PDF文件后,将文件发送给后端服务器。 接下来,后端使用Java编写一个处理上传文件的控制器。控制器接收到文件后,使用FTP客户端库连接到FTP服务器。可以使用Apache Commons Net库提供的FTPClient类。通过FTPClient,可以使用connect()方法连接到FTP服务器,使用login()方法提供用户名和密码进行登录验证,使用setFileType()方法设置文件类型为二进制,并使用storeFile()方法将文件存储到FTP服务器指定的路径。 要实现FTP服务器下载PDF文件,可以在前端创建一个下载按钮,用户点击按钮后,发起对控制器的请求。后端代码使用FTPClient连接到FTP服务器后,使用retrieveFile()方法从服务器下载指定的PDF文件到本地。 在实现上传和下载的过程,需要注意异常处理和文件路径的设置。确保FTP服务器的地址、端口、用户名和密码正确,并确保FTP服务器的路径正确。 在整个过程,还需要考虑文件的命名策略和权限管理。可以在上传文件时为文件生成唯一的文件名,避免文件冲突。此外,还可以设置FTP服务器的权限,确保上传的文件只能被授权的用户访问和下载。 通过以上步骤,就可以使用Java实现从前端上传和下载PDF文件到FTP服务器了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值