使用java将文件上传到ftp服务器

一、创建ftp服务配置对象

public class FtpSettings {

    private String host;

    private String uname;

    private String password;

    private String root;

    private String httpUrl;

    public String getHttpUrl() {
        return httpUrl;
    }

    public void setHttpUrl(String httpUrl) {
        this.httpUrl = httpUrl;
    }


    @Override
    public String toString() {
        return "FtpSettings{" +
                "host='" + host + '\'' +
                ", uname='" + uname + '\'' +
                ", password='" + password + '\'' +
                ", root='" + root + '\'' +
                ", httpUrl='" + httpUrl + '\'' +
                '}';
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRoot() {
        return root;
    }

    public void setRoot(String root) {
        this.root = root;
    }
}

 

二、ftp文件上传工具类

/**
 * 单个文件上传
 * @param dir ftp存储路径
 * @param newFileName 文件名称
 * @param inputStream 输入流
 * @param ftp ftp配置
 * @return
 */
public static boolean uploadFileToFtp(String dir, String newFileName, FileInputStream inputStream, FtpSettings ftp){
    FTPClient ftpClient = new FTPClient();
    try {
        ftpClient.connect(ftp.getHost());
        ftpClient.login(ftp.getUname(), ftp.getPassword());
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftpClient.setControlEncoding("UTF-8");
        ftpClient.setBufferSize(1024);

        System.out.println("work:"+ftp.getRoot() + dir);
        System.out.println(newFileName);
        System.out.println(ftp);

        ftpClient.changeWorkingDirectory(new String((ftp.getRoot() + dir).getBytes("GBK"),"iso-8859-1"));
        ftpClient.storeFile(new String(newFileName.getBytes("GBK"),"iso-8859-1"), inputStream);

        inputStream.close();
        ftpClient.disconnect();
        return true;
    }catch (Exception e){
        e.printStackTrace();
        return false;
    }
}

/**
 * 上传目录到ftp
 * @param dir 目录路径
 * @param ftp
 * @return
 */
public static boolean uploadDirToFtp(String dir, FtpSettings ftp) {
    List<File> files = new ArrayList<>();
    List<String> dirs = new ArrayList<>();
    dirs.add(dir);  //加入根目录
    getFiles(dir, files, dirs);   //获取根目录下的所有文件和目录
    System.out.println(dirs);
    FTPClient ftpClient = new FTPClient();
    try {
        ftpClient.connect(ftp.getHost());
        ftpClient.login(ftp.getUname(), ftp.getPassword());
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftpClient.setControlEncoding("UTF-8");
        ftpClient.setBufferSize(1024);
        for (String d : dirs) {
            System.out.println("创建目录" + d);
            ftpClient.makeDirectory(new String((ftp.getRoot() + d).getBytes("GBK"), "iso-8859-1"));
        }
        for (File file : files) {
            System.out.println("上传" + file.getName()+"       "+ftp.getRoot() + file.getParent());
            FileInputStream inputStream = new FileInputStream(file);
            ftpClient.changeWorkingDirectory(new String((ftp.getRoot() + file.getParent().replace("\\","/")).getBytes("GBK"),"iso-8859-1"));

            ftpClient.storeFile(new String(file.getName().getBytes("GBK"),"iso-8859-1"), inputStream);
            inputStream.close();
        }
        ftpClient.disconnect();
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

/**
 * 获取目录下所有文件
 * @param dir
 * @param files
 * @param dirs
 */
public static void getFiles(String dir, List<File> files, List<String> dirs) {
    File[] list = new File(dir).listFiles();
    for (File f : list) {
        if (f.isFile()) {
            files.add(f);
        } else if (f.isDirectory()) {
            dirs.add(f.getPath().replace("\\", "/"));
            getFiles(f.getPath(), files, dirs);
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值