FTP上传文件

1.引入包

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.3</version>
</dependency>

2.上传方法

首先需要有一个FTP的服务端,安装方法见FTP安装

/**
 * FTP工具类
 */
public class FTPUtils {

    private static String host = "你的FTP服务器的IP";
    private static int port = 21;
    private static String username = "ftp的账号";
    private static String password = "ftp账号的密码";
    private static String uploadPath = "上传路径";

    public static Boolean uloadFile(String filePath){
        // 创建客户端对象
        FTPClient ftp = new FTPClient();
        Boolean result = Boolean.TRUE;
        InputStream local=null;
        try {
            // 连接ftp服务器
            ftp.connect(host, port);
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                throw new Exception("FTP服务器无响应");
            }
            if (!ftp.login(username, password)) {
                throw new Exception("FTP用户名密码错误");
            }
            // 检查上传路径是否存在 如果不存在返回false
            boolean flag = ftp.changeWorkingDirectory(uploadPath);
            if(!flag){
                // 创建上传的路径  该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
                ftp.makeDirectory(uploadPath);
            }
            // 指定上传路径
            ftp.changeWorkingDirectory(uploadPath);
            // 指定上传文件的类型  二进制文件
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 读取本地文件
            File file = new File(filePath);
            local = new FileInputStream(file);
            // 第一个参数是文件名 因为如果有一个进程在处理文件 而文件又没有上传完 那么就会出现文件缺失的			 
            // 问题,所以这里用了一个临时文件 等上传完之后 再将名称改成真正的名称
            result = ftp.storeFile(file.getName() + ".tmp", local);
            if(result){
                ftp.rename(file.getName() + ".tmp", file.getName());
            }
        } catch (Exception e) {
            result = Boolean.FALSE;
            e.printStackTrace();
        } finally {
            try {
                // 关闭文件流
                local.close();
                // 退出
                ftp.logout();
                // 断开连接
                ftp.disconnect();
            } catch (IOException e) {
                result = Boolean.FALSE;
                e.printStackTrace();
            }
        }
        return result;
    }
}

3.测试

@Test
public void test6(){
    String filePath = "D:\\test.txt";
    Boolean result = FTPUtils.uloadFile(filePath);
    System.out.println("操作结果 -- " + result);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Apache Commons Net库来实现FTP上传文件到服务器,以下是一个简单的示例代码: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.springframework.stereotype.Service; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @Service public class FtpService { private final String FTP_HOST = "ftp.example.com"; private final String FTP_USERNAME = "username"; private final String FTP_PASSWORD = "password"; private final int FTP_PORT = 21; public void uploadFile(File file, String remotePath, String fileName) throws IOException { FTPClient ftpClient = new FTPClient(); try { ftpClient.connect(FTP_HOST, FTP_PORT); ftpClient.login(FTP_USERNAME, FTP_PASSWORD); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.changeWorkingDirectory(remotePath); FileInputStream inputStream = new FileInputStream(file); boolean done = ftpClient.storeFile(fileName, inputStream); inputStream.close(); if (done) { System.out.println("文件上传成功"); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 说明: 1. `FTP_HOST`、`FTP_USERNAME`、`FTP_PASSWORD`、`FTP_PORT`分别为FTP服务器的地址、用户名、密码、端口号。 2. `uploadFile`方法接收一个`File`类型的文件、一个远程路径和一个文件名,将文件上传到指定的路径下。 3. 使用`FTPClient`连接FTP服务器,设置传输方式为二进制类型,使用`storeFile`方法上传文件,最后关闭连接。 需要注意的是,在使用`FTPClient`时,需要正确处理异常。同时,为了安全起见,建议将FTP的用户名和密码存储在配置文件中,而不是写在代码中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值