java使用org.apache.commons.net.FTPClient进行FTP上传下载操作(SpringBoot版)以及文件名中文乱码处理

本文介绍了如何在Spring Boot中使用`org.apache.commons.net.FTPClient`进行FTP文件的上传和下载,特别强调了在处理中文文件名乱码问题上的解决方案。通过配置FTP连接参数、创建FTPProperties以及编写上传下载工具类,实现了FTP操作并解决了编码不一致导致的乱码问题。
摘要由CSDN通过智能技术生成

这里我先提下FTP文件名乱码这个问题吧
(1)首先FTP是一种传输协议,它本身并不是一个服务器,只是我们通常称那些可以支持FTP协议的服务端 称之为 FTP服务器

(2)FTP协议中,默认文件名编码为ISO-8859-1,这就是如果我们上次文件时,文件名含中文,如果不做编码转换处理,就会导致文件名乱码的原因

关于乱码简述: 乱码的原因,归根结底就是 编码和解码方式不一致所导致的。

下面进入Spring使用FTP正题:

1. 首先在application.yml中配置FTP的连接参数

#ftp连接配置
ftp:
  address: 127.0.0.1
  port: 21
  username: test
  password: test

2. 新建FTPProperties配置类

@Data
@Component
@ConfigurationProperties(prefix = "ftp")
public class FTPProperties {
   
    private String address;
    private Integer port;
    private String username;
    private String password;
}

3. 配置信息完成,接下来写FTP上传下载的工具类

package ftp;

import com.landa.exception.CustomException;
import ftp.config.FTPProperties;
import io.util.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.net.ftp.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.file.NoSuchFileException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author: pengfei.yang
 * @Date: 2020/5/21 9:52
 * @Version: 1.0
 **/
@Slf4j
@Component
public class FTPUtil {
   

    @Autowired
    private FTPProperties config;
	
	//本地字符编码
    private static String LOCAL_CHARSET="GBK";
    //FTP默认文件名编码
    private static String SERVER_CHARSET=FTPClient.DEFAULT_CONTROL_ENCODING;
	
	//服务端UTF8的支持选项
    private static String COMMAND_OPEN_UTF8="OPTS UTF8";
    //开启状态
    private static String OPEN_STATUS="ON";
    //路径分隔符
    private static final String SPECTOR="/";
    //中文字符匹配正则
    private static Pattern P = Pattern.compile("[\u4e00-\u9fa5]");


    /**
     * @Author: pengfei.yang
     * @Description: 与FTP服务器建立连接
     * @Date: 2020/5/21 10:16
     * @return: org.apache.commons.net.ftp.FTPClient
     **/
    public FTPClient getFtpConnection()throws Exception{
   
        FTPClient ftpClient = new FTPClient();
        /*FTPClientConfig clientConfig=new FTPClientConfig();
        clientConfig.setDefaultDateFormatStr("yyyy-MM-dd HH:mm:ss");*/
        /*
            保存要由FTP控件连接使用的字符编码。某些FTP服务器要求以非ASCII编码(如UTF-8)发布命令,以便可以指定具有多字节字符表示形式(例如Big 8)的文件名。
            请注意,必须在建立连接之前进行设置。一般情况下默认不设置该项
            ftpClient.setControlEncoding("UTF-8");
            FTP默认_controlEncoding为'ISO-8859-1',若已明确FTP服务器支持UTF-8且该项设置了UTF-8
            则SERVER_CHARSET需由'ISO-8859-1'改为"UTF-8"否则连接之后的后续操作如果包含中文则会导致文件名乱码;
        */
        ftpClient.connect(config.getAddress(), config.getPort
### 回答1: 这个错误通常出现在你的 Java 项目中使用Apache Commons Net 库,但是该库没有被正确地添加到类路径中。你需要在项目中添加正确本的 Apache Commons Net 库。 如果你使用 Maven 进行依赖管理,可以在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.7.2</version> </dependency> ``` 如果你手动管理依赖,可以下载适当本的 Apache Commons Net 库,并将其添加到类路径中。 如果你已经添加了正确的库但仍然遇到此错误,请确保你的构建工具(例如 Maven 或 Gradle)正在正确地构建项目,并且库已被正确地包含在项目中。 ### 回答2: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient是一个Java异常,表示找不到org.apache.commons.net.ftp.FTPClient类。 这个错误通常发生在类加载器不能在运行时找到所需的类文件时。在这种情况下,出现了一个或多个可能的原因: 1. 缺少依赖项:发生这个错误最常见的原因是缺少所需的依赖项。在这种情况下,你需要确保你的项目中包含了Apache Commons Net库的JAR文件。你可以通过将该库添加到项目的构建路径中来解决此问题。 2. 类路径问题:如果你已经添加了正确的依赖项但仍然发生此错误,可能是由于类路径设置不正确造成的。请确保你的类路径包括了包含所需类文件的路径。 3. 本不匹配:有时候,当你使用的类库的本与你项目中的其他依赖项不兼容时,会发生NoClassDefFoundError错误。在这种情况下,你需要确保你所使用的类库的本与其他依赖项相匹配。 解决这个错误的步骤如下: 1. 检查你的项目中是否包含了正确的依赖项。 2. 确保你的类路径设置正确并且包含了所有必要的类文件。 3. 检查你项目中所有依赖项的本是否匹配。 如果你按照上述步骤操作仍然无法解决问题,你可以尝试在互联网上搜索更多关于该错误的解决方案或者咨询开发社区的帮助。 ### 回答3: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClientJava中的一个异常错误,表示找不到org.apache.commons.net.ftp.FTPClient类。 在Java开发中,这个错误通常是由于缺少相关的jar包或类路径配置错误引起的。解决这个错误的方法包括: 1. 确保你的项目中包含了org.apache.commons.net.ftp.FTPClient类所在的jar包。这个类通常位于Apache Commons Net库中,你需要将这个jar包添加到你的项目的构建路径中。 2. 检查你的类路径配置是否正确。如果你使用的是Eclipse等IDE,你可以确认你的项目构建路径中包含了Apache Commons Net库。 3. 如果你已经正确导入了jar包并配置了类路径,但仍然出现这个错误,你可以检查一下jar包是否被正确部署到了服务器或者运行环境中。 总而言之,解决java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient错误的方法是确保项目中包含了所需的jar包,并配置了正确的类路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值