java操作vsftpd文件服務器

Java操作Vsftpd文件服務器

  1. 使用ftp

    Vsftpd文件服務器根路徑位於:/home/ftpuser

    Nginx Web服務器根路徑位於:/home/ftpuser/shy/

    • 啓動ftp服務

      systemctl start vsftpd
      
    • 啓動nginx

      /usr/local/nginx/sbin/nginx
      
  2. Java FTP文件上傳

    1. 引入依賴

      <dependency>
           <groupId>commons-net</groupId>
           <artifactId>commons-net</artifactId>
           <version>3.3</version>
      </dependency>
      
    2. 編寫工具類

      package com.shy.util;
      
      import org.apache.commons.net.ftp.FTP;
      import org.apache.commons.net.ftp.FTPClient;
      import org.apache.commons.net.ftp.FTPReply;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      
      import java.io.*;
      import java.util.UUID;
      
      /**
       * 文件上傳工具類
       */
      public class FTPUtil {
      	//日誌
          private static Logger logger = LoggerFactory.getLogger(FTPUtil.class);
      
          /**
           * 文件上傳
           * @param host      服務器IP
           * @param port      服務器端口
           * @param username  服務器用戶名
           * @param password  服務器密碼
           * @param path      文件服務器路徑/年/月/日
           * @param fileName  文件名 1.jpg
           * @param is        文件流
           * @return
           */
          public static String fileUpload(String host, int port,
                                          String username, String password,
                                          String path, String fileName,
                                          InputStream is){
              //判斷操作是否正確
              boolean flag = false;
              //返回的文件名
              String remote = null;
              //創建ftp客戶端
              FTPClient ftpClient = new FTPClient();
              try {
                  //設置編碼字符集
                  ftpClient.setControlEncoding("UTF-8");
                  //連接FTP服務器
                  ftpClient.connect(host,port);
                  //登錄
                  flag = ftpClient.login(username,password);
                  if (!flag){
                      logger.error("文件服務器用戶名或密碼錯誤");
                      return null;
                  }
                  //獲取登錄的狀態碼
                  int reply = ftpClient.getReplyCode();
                  if (!FTPReply.isPositiveCompletion(reply)){
                      ftpClient.disconnect();
                      return null;
                  }
                  /****************創建目錄,一次只能創建一個目錄****************/
                  String basePath = "/";
                  for (String p: path.split("/")){
                      basePath +=(p+"/");
                      //判斷目錄是否以及存在
                      boolean hasPath = ftpClient.changeWorkingDirectory(basePath);
                      if (!hasPath){
                          //創建目錄,如果創建失敗一般都是權限問題
                          ftpClient.makeDirectory(basePath);
                      }
                  }
      
                  //重新指定上傳的路徑
                  ftpClient.changeWorkingDirectory(path);
                  /**********************************************************/
      
                  //指定上傳方式爲二進制方式
                  ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                  //得到文件後綴
                  String suffix = fileName.substring(fileName.lastIndexOf("."));
                  System.out.println("-----"+suffix);
                  remote = UUIDUtil.getUUID()+suffix;
                  // remote指定上傳遠程服務器的文件名 local指本地的輸入流
                  flag = ftpClient.storeFile(remote, is);
                  if (!flag) {
                      logger.error("文件上傳失敗,可能是權限,防火牆等問題");
                      return null;
                  }
              }catch (IOException e){
                  logger.error("文件上傳錯誤,錯誤原因:" + e.getMessage());
              }finally {
                  try {
                      if(is != null)
                          is.close();
      
                      ftpClient.logout();
      
                      if(ftpClient.isConnected())
                          ftpClient.disconnect();
                  } catch (IOException e) {
                      logger.error("文件上傳錯誤,錯誤原因:" + e.getMessage());
                  }
              }
              return remote;
          }
      
    3. 測試

      public static void main(String[] arg) throws FileNotFoundException {
              InputStream is = new FileInputStream(new File("E://Images//timg.jpg"));
              fileUpload("192.168.40.100", 21, "ftpuser", "123456",
                      "/home/ftpuser/shy/2019/09/10", "flower.jpg", is);
          }
      }
      

文件下載請參考

https://blog.csdn.net/qq_25432245/article/details/86334304

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章