ftp上传下载,转Base64工具类,以及ftp.storeFile 返回false 解决方法

/**

  • ftp上传下载工具类
    /
    public class FtpUtil {
    private static Logger logger = LoggerFactory.getLogger(FtpUtil.class);
    @Value(" f t p c l i e n t . h o s t " ) p r i v a t e s t a t i c S t r i n g h o s t ; @ V a l u e ( " {ftpclient.host}") private static String host; @Value(" ftpclient.host")privatestaticStringhost;@Value("{ftpclient.port}")
    private static int port;
    @Value(" f t p c l i e n t . u s e r n a m e " ) p r i v a t e s t a t i c S t r i n g u s e r n a m e ; @ V a l u e ( " {ftpclient.username}") private static String username; @Value(" ftpclient.username")privatestaticStringusername;@Value("{ftpclient.password}")
    private static String password;
    @Value(" f t p c l i e n t . b a s e P a t h " ) p r i v a t e s t a t i c S t r i n g b a s e P a t h ; @ V a l u e ( " {ftpclient.basePath}") private static String basePath; @Value(" ftpclient.basePath")privatestaticStringbasePath;@Value("{ftpclient.filepath}")
    private static String filePath;
    /
    *

    • Description: 向FTP服务器上传文件
    • @param host
    •        FTP服务器hostname
      
    • @param port
    •        FTP服务器端口
      
    • @param username
    •        FTP登录账号
      
    • @param password
    •        FTP登录密码
      
    • @param basePath
    •        FTP服务器基础目录
      
    • @param filePath
    •        FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
      
    • @param filename
    •        上传到FTP服务器上的文件名
      
    • @param input
    •        输入流
      
    • @return 成功返回true,否则返回false
      */
      public static boolean uploadFile(String host, int port, String username, String password, String basePath,
      String filePath, String filename, InputStream input) {
      boolean result = false;
      FTPClient ftp = new FTPClient();
      try {
      int reply;
      ftp.connect(host, port);// 连接FTP服务器
      // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
      ftp.login(username, password);// 登录
      reply = ftp.getReplyCode();
      if (!FTPReply.isPositiveCompletion(reply)) {
      ftp.disconnect();
      return result;
      }
      // 切换到上传目录
      if (!ftp.changeWorkingDirectory(basePath + filePath)) {
      // 如果目录不存在创建目录
      String[] dirs = filePath.split("/");
      String tempPath = basePath;
      System.out.println(tempPath+"--------------");
      for (String dir : dirs) {
      if (null == dir || “”.equals(dir))
      continue;
      tempPath += “/” + dir;
      if (!ftp.changeWorkingDirectory(tempPath)) {
      if (!ftp.makeDirectory(tempPath)) {
      return result;
      } else {
      ftp.changeWorkingDirectory(tempPath);
      }
      }
      }
      }
      // 设置上传文件的类型为二进制类型
      ftp.setFileType(FTP.BINARY_FILE_TYPE);
      ftp.setControlEncoding(“UTF-8”); //编码
      ftp.enterLocalPassiveMode(); //启动被动模式
      // 上传文件
      if (!ftp.storeFile(new String(filename.getBytes(“UTF-8”),“iso-8859-1”), input)) {
      return result;
      }
      input.close();
      ftp.logout();
      result = true;
      } catch (IOException e) {
      logger.error(“系统异常”,e);
      } finally {
      if (ftp.isConnected()) {
      try {
      ftp.disconnect();
      } catch (IOException ioe) {
      logger.error(“系统异常”,ioe);
      }
      }
      }
      return result;
      }

    /**

    • Description: 从FTP服务器下载文件

    • @param host

    •        FTP服务器hostname
      
    • @param port

    •        FTP服务器端口
      
    • @param username

    •        FTP登录账号
      
    • @param password

    •        FTP登录密码
      
    • @param remotePath

    •        FTP服务器上的相对路径
      
    • @param fileName

    •        要下载的文件名
      
    • @param localPath

    •        下载后保存到本地的路径
      
    • @return
      */
      public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
      String fileName, String localPath) {
      boolean result = false;
      FTPClient ftp = new FTPClient();
      try {
      int reply;
      ftp.connect(host, port);
      // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
      ftp.login(username, password);// 登录
      ftp.enterLocalPassiveMode();
      reply = ftp.getReplyCode();
      if (!FTPReply.isPositiveCompletion(reply)) {
      ftp.disconnect();
      return result;
      }
      ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
      FTPFile[] fs = ftp.listFiles();
      for (FTPFile ff : fs) {
      if (ff.getName().equals(fileName)) {
      File localFile = new File(localPath + “/” + ff.getName());
      OutputStream is = new FileOutputStream(localFile);
      Boolean isSuc = ftp.retrieveFile(ff.getName(), is);
      is.close();
      }
      }

       ftp.logout();
       result = true;
      

      } catch (IOException e) {
      logger.error(“系统异常”,e);
      } finally {
      if (ftp.isConnected()) {
      try {
      ftp.disconnect();
      } catch (IOException ioe) {
      }
      }
      }
      return result;
      }

    public static String getBase64Picture(String pictureName){
    String ftpUrl =basePath+filePath;
    FTPClient ftp = new FTPClient();
    InputStream inputStream = null;
    String re=null;
    try {
    String ftp_ip=host;
    int ftp_port =22;
    int reply;
    ftp.connect(ftp_ip, ftp_port);
    // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
    ftp.login(username, password);// 登录
    ftp.enterLocalPassiveMode();
    reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply)) {
    ftp.disconnect();
    // return result;
    }
    if (!FTPReply.isPositiveCompletion(reply)) {
    ftp.disconnect();
    }
    ftp.enterLocalPassiveMode();
    //跳转到指定目录
    ftp.changeWorkingDirectory(ftpUrl);
    //5.遍历下载的目录
    FTPFile[] fs = ftp.listFiles();
    System.out.println(fs.length);
    for (FTPFile ff : fs){
    //解决中文乱码问题,两次解码
    byte[] bytes=ff.getName().getBytes(“iso-8859-1”);
    String fileName=new String(bytes,“utf-8”);
    if(pictureName.equals(fileName)){
    inputStream = ftp.retrieveFileStream(fileName);
    break;
    }
    }
    if (inputStream != null) {
    byte[] data=null;
    ByteArrayOutputStream outStream =new ByteArrayOutputStream();
    data=new byte[inputStream.available()];
    int len=0;
    while((len=inputStream.read(data))!=-1){
    outStream.write(data,0,len);
    }
    data=outStream.toByteArray();
    Base64.Encoder encoder=Base64.getEncoder();
    re=encoder.encodeToString(data);
    System.out.println(re);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    if(ftp.isConnected()){
    try{
    ftp.disconnect();
    }catch(IOException e){
    e.printStackTrace();
    }
    }
    if(null != inputStream){
    try {
    inputStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

     return re;
    

    }

}

ftp.storeFile 返回false

登录服务器 :
输入:getsebool -a|grep ftp
[root@localhost ftp]# getsebool -a|grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> on

当 tftp_home_dir --> off
ftpd_full_access -->off
为 off 时应当设置成打开

输入:tftp_home_dir --> on
ftpd_full_access -->off

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值