91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現跨服務器上傳文件功能

發布時間:2021-04-15 14:23:39 來源:億速云 閱讀:357 作者:小新 欄目:編程語言

這篇文章主要介紹了Java怎么實現跨服務器上傳文件功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前幾天做個項目,本身客戶端和管理員端是寫在一起的,共用一臺服務器,客戶上傳的文件都是存在服務器的硬盤上的。老龍提出要把客戶端和管理員端分離,這時候用戶上傳的附件的存儲就出現問題了。顯然,把大到幾百M的apk文件存到數據庫不現實,查了半天,在兩端建立ftp服務器傳文件是最快的方法。

具體流程是,用戶登錄外網客戶端,上傳文件到外網的服務器硬盤上,在此同時,文件通過外網服務器訪問內網管理員服務器的ftp服務器,傳到內網服務器的硬盤上。這樣內網服務器可以對上傳的文件進行加密簽名工作,之后也通過ftp的方式把文件回傳到外網服務器硬盤上,供用戶進行其他操作。

具體實現時用到的工具:Serv-U。Serv-U是一個方便我們在windows上建立ftp服務器的工具。下載破解后,按照步驟,設置好Ip、端口、賬戶密碼、允許ftp訪問的磁盤路徑、操作權限等,就可以使用了。IP在本機測試的時候就選127.0.0.1,內網測試時就選192.168.0.x。

在java項目中的實現,我自己寫了個工具類,用到了apache的commons-net包,有上傳,下載以及刪除功能。附上代碼:

package app.ftp; 
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 
import org.apache.commons.net.ftp.FTPReply; 
 
/** 
 * FTP服務器工具類 
 * 
 */ 
public class FTPUtils { 
   
  /** 
   * 上傳文件至FTP服務器 
   * 
   * @param url 
   *   服務器IP地址 
   * @param port 
   *   服務器端口 
   * @param userName 
   *   用戶登錄名 
   * @param password 
   *   用戶登錄密碼 
   * @param storePath 
   *   服務器文件存儲路徑 
   * @param fileName 
   *   服務器文件存儲名稱 
   * @param is 
   *   文件輸入流 
   * @return 
   *   <b>true</b>:上傳成功 
   *   <br/> 
   *   <b>false</b>:上傳失敗 
   */ 
  public static boolean storeFile (String url, int port, String userName, String password, String storePath, String fileName, InputStream is) { 
    boolean result = false; 
    FTPClient ftp = new FTPClient(); 
    try { 
      // 連接至服務器,端口默認為21時,可直接通過URL連接 
      ftp.connect(url ,port); 
      // 登錄服務器 
      ftp.login(userName, password); 
      // 判斷返回碼是否合法 
      if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { 
        // 不合法時斷開連接 
        ftp.disconnect(); 
        // 結束程序 
        return result; 
      } 
      // 判斷ftp目錄是否存在,如果不存在則創建目錄,包括創建多級目錄 
      String s = "/"+storePath; 
      String[] dirs = s.split("/"); 
      ftp.changeWorkingDirectory("/");       
        //按順序檢查目錄是否存在,不存在則創建目錄  
        for(int i=1; dirs!=null&&i<dirs.length; i++) {  
          if(!ftp.changeWorkingDirectory(dirs[i])) {  
            if(ftp.makeDirectory(dirs[i])) {  
              if(!ftp.changeWorkingDirectory(dirs[i])) {  
                return false;  
              }  
            }else {  
              return false;              
            }  
          }  
        }  
      // 設置文件操作目錄 
      ftp.changeWorkingDirectory(storePath); 
      // 設置文件類型,二進制 
      ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 
      // 設置緩沖區大小 
      ftp.setBufferSize(3072); 
      // 上傳文件 
      result = ftp.storeFile(fileName, is); 
      // 關閉輸入流 
      is.close(); 
      // 登出服務器 
      ftp.logout(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        // 判斷輸入流是否存在 
        if (null != is) { 
          // 關閉輸入流 
          is.close(); 
        } 
        // 判斷連接是否存在 
        if (ftp.isConnected()) { 
          // 斷開連接 
          ftp.disconnect(); 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
    return result; 
  } 
   
  /** 
   * 從FTP服務器下載文件至本地 
   * 
   * @param url 
   *   服務器IP地址 
   * @param port 
   *   服務器端口 
   * @param userName 
   *   用戶登錄名 
   * @param password 
   *   用戶登錄密碼 
   * @param remotePath 
   *   服務器文件存儲路徑 
   * @param fileName 
   *   服務器文件存儲名稱 
   * @param localPath 
   *   本地文件存儲路徑 
   * @return 
   *   <b>true</b>:下載成功 
   *   <br/> 
   *   <b>false</b>:下載失敗 
   */ 
  public static boolean retrieveFile (String url, int port, String userName, String password, String remotePath, String fileName, String localPath) { 
    boolean result = false; 
    FTPClient ftp = new FTPClient(); 
    OutputStream os = null; 
    try { 
      // 連接至服務器,端口默認為21時,可直接通過URL連接 
      ftp.connect(url ,port); 
      // 登錄服務器 
      ftp.login(userName, password); 
      // 判斷返回碼是否合法 
      if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { 
        // 不合法時斷開連接 
        ftp.disconnect(); 
        // 結束程序 
        return result; 
      } 
      // 設置文件操作目錄 
      ftp.changeWorkingDirectory(remotePath); 
      // 設置文件類型,二進制 
      ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 
      // 設置緩沖區大小 
      ftp.setBufferSize(3072); 
      // 設置字符編碼 
      ftp.setControlEncoding("UTF-8"); 
      // 構造本地文件對象 
      File localFile = new File(localPath + "/" + fileName); 
      // 獲取文件操作目錄下所有文件名稱 
      String[] remoteNames = ftp.listNames(); 
      // 循環比對文件名稱,判斷是否含有當前要下載的文件名 
      for (String remoteName: remoteNames) { 
        if (fileName.equals(remoteName)) { 
          result = true; 
        } 
      } 
      // 文件名稱比對成功時,進入下載流程 
      if (result) { 
        // 構造文件輸出流 
        os = new FileOutputStream(localFile); 
        // 下載文件 
        result = ftp.retrieveFile(fileName, os); 
        // 關閉輸出流 
        os.close(); 
      } 
      // 登出服務器 
      ftp.logout(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        // 判斷輸出流是否存在 
        if (null != os) { 
          // 關閉輸出流 
          os.close(); 
        } 
        // 判斷連接是否存在 
        if (ftp.isConnected()) { 
          // 斷開連接 
          ftp.disconnect(); 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
    return result; 
  } 
   
  /** 
   * 從FTP服務器刪除文件 
   * 
   * @param url 
   *   服務器IP地址 
   * @param port 
   *   服務器端口 
   * @param userName 
   *   用戶登錄名 
   * @param password 
   *   用戶登錄密碼 
   * @param remotePath 
   *   服務器文件存儲路徑 
   * @param fileName 
   *   服務器文件存儲名稱 
   * @return 
   *   <b>true</b>:刪除成功 
   *   <br/> 
   *   <b>false</b>:刪除失敗 
   */ 
  public static boolean deleteFile (String url, int port, String userName, String password, String remotePath, String fileName) { 
    boolean result = false; 
    FTPClient ftp = new FTPClient(); 
    try { 
      // 連接至服務器,端口默認為21時,可直接通過URL連接 
      ftp.connect(url ,port); 
      // 登錄服務器 
      ftp.login(userName, password); 
      // 判斷返回碼是否合法 
      if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { 
        // 不合法時斷開連接 
        ftp.disconnect(); 
        // 結束程序 
        return result; 
      } 
      // 設置文件操作目錄 
      ftp.changeWorkingDirectory(remotePath); 
      // 設置文件類型,二進制 
      ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 
      // 設置緩沖區大小 
      ftp.setBufferSize(3072); 
      // 設置字符編碼 
      ftp.setControlEncoding("UTF-8"); 
      // 獲取文件操作目錄下所有文件名稱 
      String[] remoteNames = ftp.listNames(); 
      // 循環比對文件名稱,判斷是否含有當前要下載的文件名 
      for (String remoteName: remoteNames) { 
        if (fileName.equals(remoteName)) { 
          result = true; 
        } 
      } 
      // 文件名稱比對成功時,進入刪除流程 
      if (result) { 
        // 刪除文件 
        result = ftp.deleteFile(fileName); 
      } 
      // 登出服務器 
      ftp.logout(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        // 判斷連接是否存在 
        if (ftp.isConnected()) { 
          // 斷開連接 
          ftp.disconnect(); 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
    return result; 
  }   
 
   
  public static void main(String[] args) throws FileNotFoundException { 
//   try { 
//     FileInputStream fis = new FileInputStream(new File("D:/Soft Storage/軟件工具箱/HTML_Help_WorkShop_1.3_XiaZaiBa.zip")); 
//     System.out.println(storeFile("192.168.1.2", 21, "admin", "1", "C:/Documents and Settings/Administrator/桌面", RandomUUID.random() + ".zip", fis)); 
//   } catch (FileNotFoundException e) { 
//     e.printStackTrace(); 
//   } 
//    
    //File file = new File("C:/Users/freed/Desktop/1.txt"); 
    //InputStream is = new FileInputStream(file); 
 
    //System.out.println(storeFile("127.0.0.1", 21, "feili", "feili", "examples", "2.txt", is)); 
    //System.out.println(retrieveFile("127.0.0.1", 21, "feili", "feili", "examples/jsp", "index.html", "C:/Users/freed/Desktop")); 
    //System.out.println(deleteFile("127.0.0.1", 21, "feili", "feili", "testpath", "1.txt")); 
 
  } 
 
   
}

需要注意的是上傳文件的時候要將File文件先放入fileinputstream中。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java怎么實現跨服務器上傳文件功能”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清丰县| 左贡县| 鹿邑县| 榆中县| 金乡县| 巫山县| 高淳县| 四子王旗| 高安市| 湾仔区| 中江县| 临安市| 长阳| 罗甸县| 南汇区| 邯郸市| 湖北省| 桐庐县| 荥经县| 突泉县| 平南县| 黄骅市| 洪泽县| 井研县| 鱼台县| 台中县| 晋中市| 电白县| 潍坊市| 武汉市| 文水县| 墨江| 尼木县| 类乌齐县| 海南省| 马鞍山市| 临城县| 石屏县| 梅河口市| 原平市| 万载县|