关于FTP服务器文件上传时返回false问题。

网上各种资料找了一堆,什么主动调用,被动调用都试过了没用,最后发现是文件名称的问题导致的,需要设置字符集编码

FTP使用用户隔离时,一定要新建localuser文件夹


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

public class Test {
    public static void testFtp1() {
        // 创建客户端对象
        FTPClient ftp = new FTPClient();
        InputStream local = null;
        try {
            // 连接ftp服务器
            ftp.connect("192.168.0.12", 21);
            // 登录
            ftp.login("Ftpyc", "Ftpyc");
            // 设置上传路径
            String path = "/upload";
            // 检查上传路径是否存在 如果不存在返回false
            boolean flag = ftp.changeWorkingDirectory(path);
            if (!flag) {
                // 创建上传的路径 该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
                ftp.makeDirectory(path);
            }
            // 指定上传路径
            ftp.changeWorkingDirectory(path);
            // 指定上传文件的类型 二进制文件
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 读取本地文件
            File file = new File("C:\\Users\\Administrator\\Desktop\\非空新增字段.txt");
            local = new FileInputStream(file);
            // 第一个参数是文件名
            //ftp.enterLocalPassiveMode();

           //在此处设置字符集
            ftp.setControlEncoding("GBK");
            String name=file.getName();

           //需要设置文件名称字符集
            boolean flag2=ftp.storeFile(new String(name.getBytes("GBK"),"iso-8859-1"), local);
            System.out.println(flag2);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭文件流
                local.close();
                // 退出
                ftp.logout();
                // 断开连接
                ftp.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        testFtp1();
    }
}
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值