FTPSClient上传文件

本文介绍了在Java环境中,使用FTPSClient上传文件时遇到的问题及解决方法。主要涉及环境为Java 1.8,需要commons-net-3.6.jar库。问题在于FTPSClient的_session reuse_导致的`425 Unable to build data connection: TLS session of data connection not resumed.`错误。通过重写FTPSClient的_prepareDataSocket_方法来解决。同时提供了相关参考资料,包括FTP协议详解、FTPSClient的错误处理及证书链接服务器等教程链接。
摘要由CSDN通过智能技术生成

1.环境信息

java1.8 

jar依赖:commons-net-3.6.jar

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

2.代码实现

  • Main:

package com.hellojava.ftp;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Objects;

public class FtpTest {

    public static void main(String[] args) throws IOException {
        String userName = "admin";
        String passWord = "admin";
        String port = "21";
        String hostName = "127.0.0.1";
        FileInputStream inputStream = null;
        try {
            FTPSClient ftpsClient = ftpConnection(hostName, Integer.valueOf(port), userName, passWord);

            System.out.println(ftpsClient.listFiles().length);
//            Arrays.stream(ftpsClient.listFiles()).forEach(System.out::println);
            
            // 上传文件
            File file = new File("F:\\code\\Test\\Demo\\Demo.iml");
            inputStream = new FileInputStream(file);
            boolean storeFile = ftpsClient.storeFile(file.getName(), inputStream);
            System.out.println(storeFile);
        } finally {
            if (Objects.nonNull(inputStream)) {
                inputStream.close();
            }
        }
    }
    private static
Java FtpsClient 是 Apache Commons Net 库中的一个类,用于实现 FTP 客户端的功能。隐式 FTPS 是一种安全传输协议,与普通的 FTP 相比,隐式 FTPS 通过在传输过程中使用 SSL/TLS 加密技术来实现更高级别的数据传输安全。 要设置隐式 FTPS,首先需要创建一个 FtpsClient 对象,并通过 setEnabledProtocols() 方法来设置使用的传输协议。例如,可以使用如下代码来设置使用隐式 FTPS: FtpsClient ftpsClient = new FtpsClient(); ftpsClient.setEnabledProtocols(new String[]{"TLSv1.2"}); 上述代码将设置 FtpsClient 使用 TLSv1.2 协议来进行传输。 接下来,需要通过 connect() 方法连接到 FTP 服务器,并通过 feteServerSocketFactory() 方法创建一个 SSLSocketFactory 对象,用于为数据传输创建加密的套接字。例如,可以使用如下代码来进行连接和创建 SSLSocketFactory 对象: ftpsClient.connect("ftp.example.com", 990); SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSecureRandomFactory.getDefault().createSocketFactory(); 然后,可以使用 setSocketFactory() 方法将 SSLSocketFactory 对象设置给 FtpsClient,以确保在传输时使用 SSL/TLS 加密。例如,可以使用如下代码将 SSLSocketFactory 对象设置给 FtpsClientftpsClient.setSocketFactory(sslSocketFactory); 最后,通过登录 FTP 服务器的用户名和密码进行身份验证,并执行其他 FTP 操作,例如上传、下载文件等。 需要注意的是,要成功连接和设置隐式 FTPS,服务器端必须正确配置并支持隐式 FTPS 协议。同时,以上代码仅为示例,实际中可能需要进行更多的异常处理和其他设置。 总结起来,设置 Java FtpsClient 使用隐式 FTPS 需要创建 FtpsClient 对象、设置使用的传输协议、连接 FTP 服务器、创建和设置 SSLSocketFactory 对象,以及进行身份验证和执行 FTP 操作。以上所述为一种常用的实现方式,具体可以根据需要进行适当调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值