java上传文件至ftp服务器

  1. 添加依赖
  2. <dependency>
    		<groupId>commons-net</groupId>
    		<artifactId>commons-net</artifactId>
    		<version>3.3</version>
    </dependency>
  3. 封装工具类:
  4. package com.bjsxt.utils;

     

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.net.SocketException;

    import java.util.UUID;

     

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

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

     

    public class FtpUtil {

     

    public static String upload(String hostname,String username,String password,

    String targetPath,String suffix,InputStream inputStream) throws SocketException, IOException {

    //实例化ftpClient

    FTPClient ftpClient = new FTPClient();

    //1.连接服务器

    ftpClient.connect(hostname);

    //2.登录(指定用户名和密码)

    ftpClient.login(username,password);

    //基本路径,一定存在

    String basePath="/";

    String[] pathArray = targetPath.split("/");

    for(String path:pathArray){

    basePath+=path+"/";

    //3.指定目录 返回布尔类型 true表示该目录存在

    boolean dirExsists = ftpClient.changeWorkingDirectory(basePath);

    //4.如果指定的目录不存在,则创建目录

    if(!dirExsists){

    //此方式,每次,只能创建一级目录

    ftpClient.makeDirectory(basePath);

    }

    }

    //重新指定上传文件的路径

    ftpClient.changeWorkingDirectory(targetPath);

    //5.设置上传文件的方式

    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

    //使用uuid,保存文件名唯一性

    String uuid=UUID.randomUUID().toString();

    /**

     * 6.执行上传

     * remote 上传服务后,文件的名称

     * local 文件输入流

     * 上传文件时,如果已经存在同名文件,会被覆盖

     */

    ftpClient.storeFile(uuid+suffix,inputStream);

    return uuid+suffix;

    }

     

    /**

     * 根据文件名,获取文件后缀

     * @param args

     * @throws SocketException

     * @throws IOException

     */

    public static String getSuffix(String filename){

    String suffix = "";

    int fnum = filename.lastIndexOf(".");

    if(fnum>0){

    suffix = filename.substring(fnum);

    }

    return suffix;

    }

     

     

    public static void main(String[] args) throws SocketException, IOException {

    InputStream inputStream = new FileInputStream("E:/2017-03-22_091602.png");

    String remoteFilename = upload("192.168.88.10", "ftpuser", "111111", "/home/ftpuser/www/2017/03/22", ".png", inputStream);

    System.out.println(remoteFilename);

    }

    }

     

  5. 几个重要的方法:

  6. ftpClient.connect(path);//用于指定ftp服务器地址
  7. ftpClient.login(username,password);//指定用户名和密码
  8. ftpClient. changeWorkingDirectory(path);//指定上传文件路径
  9. ftpCient. makeDirectory(path)//创建目录
  10. ftpClient.setFileType(FTP.BINARY_FILE_TYPE)//指定上传方式
  11. ftpClent. storeFile(remote,local)//上传文件
  12. 解决ftp DNS逆向解析
  13. 此问题会导致文件上传慢。

    解决方法:关闭ftp DNS逆向解析

    修改/etc/vsftpd/vsftpd.conf文件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值