亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

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

2024-07-13 10:16:33
字體:
來源:轉載
供稿:網友

前幾天做個項目,本身客戶端和管理員端是寫在一起的,共用一臺服務器,客戶上傳的文件都是存在服務器的硬盤上的。老龍提出要把客戶端和管理員端分離,這時候用戶上傳的附件的存儲就出現問題了。顯然,把大到幾百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中。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美一区二区三区久久人妖| 亚洲九九九在线观看| 欧美日韩午夜剧场| 97在线日本国产| 国产精品国产三级国产aⅴ浪潮| 欧美色图在线视频| 日韩欧美大尺度| 91网在线免费观看| 不卡av在线播放| 日韩精品久久久久久久玫瑰园| 精品国产精品三级精品av网址| 欧美激情视频在线| 国产精品99蜜臀久久不卡二区| 日韩在线观看免费全集电视剧网站| 精品国产一区二区三区久久狼黑人| 26uuu亚洲国产精品| 久久精品青青大伊人av| 亚洲色图第三页| 亚洲美女福利视频网站| 国产精品久久久久秋霞鲁丝| 日韩精品免费电影| 亚洲欧美在线看| 亚洲缚视频在线观看| 日韩精品视频在线| 精品视频中文字幕| 欧美一区二区三区免费观看| 亚洲一区二区免费在线| 色yeye香蕉凹凸一区二区av| 色婷婷综合成人| 国产区精品视频| 中文字幕久久久av一区| 亚洲成年人在线| 精品偷拍一区二区三区在线看| 亚洲精品suv精品一区二区| 久色乳综合思思在线视频| 91精品在线观| 欧美激情视频一区二区三区不卡| 在线观看久久av| 91亚洲精华国产精华| 欧美富婆性猛交| 国内精品国产三级国产在线专| 久久精品视频播放| 亚洲已满18点击进入在线看片| 在线观看欧美www| 欧美性猛交视频| 成人精品网站在线观看| 精品久久久久久久久中文字幕| 亚洲性线免费观看视频成熟| 欧美性xxxx极品hd满灌| 久久综合伊人77777蜜臀| 国产日韩精品一区二区| 欧美视频裸体精品| 欧美成人一区二区三区电影| 国产精品视频不卡| 亚洲国产成人在线播放| 成人a在线观看| 国产91精品黑色丝袜高跟鞋| 日韩视频免费观看| 日韩av中文字幕在线| 欧美成人三级视频网站| 黄网站色欧美视频| 色妞欧美日韩在线| 欧美大片在线看免费观看| 日韩精品一二三四区| 亚洲国产欧美一区| 69av在线播放| 国产精品国产福利国产秒拍| 国产精品老女人视频| 久久久亚洲福利精品午夜| 欧美精品激情在线| 日韩大片免费观看视频播放| 日韩有码视频在线| 国产精品网站视频| 中文字幕亚洲综合久久筱田步美| 奇门遁甲1982国语版免费观看高清| 亚洲深夜福利视频| 欧美精品一二区| 欧美裸体视频网站| 91免费观看网站| 51视频国产精品一区二区| 热草久综合在线| 欧美日韩成人在线观看| 韩国视频理论视频久久| 国产精自产拍久久久久久| 国产精品69久久久久| 日韩在线www| 国产精品第100页| 亚洲免费高清视频| 精品电影在线观看| 国产一区二区三区在线观看网站| 亚洲成色999久久网站| 亚洲欧美国产日韩中文字幕| 国产狼人综合免费视频| 国产亚洲美女久久| 欧美激情手机在线视频| 亚洲天堂久久av| 国产精品直播网红| 国产成人avxxxxx在线看| 欧美裸身视频免费观看| 久久久久久国产精品三级玉女聊斋| 播播国产欧美激情| 日韩美女主播视频| 精品久久久久人成| 日韩精品在线免费观看| 日韩美女在线观看| 国产午夜精品免费一区二区三区| 国产精品福利在线| 日韩在线观看你懂的| 一本色道久久88亚洲综合88| 亚洲电影免费观看高清完整版在线观看| 538国产精品一区二区免费视频| 精品亚洲一区二区三区四区五区| 亚洲国产精品va在线看黑人动漫| 中文字幕视频在线免费欧美日韩综合在线看| 日av在线播放中文不卡| 国产丝袜精品第一页| 日韩www在线| 欧美精品一区二区三区国产精品| 亚洲自拍高清视频网站| 日本韩国在线不卡| 日韩hd视频在线观看| 97婷婷涩涩精品一区| 美女啪啪无遮挡免费久久网站| 亚洲免费视频网站| 欧美成人黄色小视频| 在线电影欧美日韩一区二区私密| 亚洲国产高潮在线观看| 91高清视频免费| 国产在线视频欧美| 欧美—级a级欧美特级ar全黄| 国产精品福利观看| 国产日韩精品在线| 亚洲a中文字幕| 羞羞色国产精品| 国产成人在线一区二区| 国产日韩在线亚洲字幕中文| 日韩欧美在线第一页| 久久亚洲国产精品成人av秋霞| 91精品国产自产91精品| 日韩中文在线中文网在线观看| 亚洲精品资源在线| 欧美一级大片视频| 日韩高清电影好看的电视剧电影| 成人福利在线视频| 国产精品久久久久久久久久新婚| 欧美成人午夜影院| 亚洲高清不卡av| 成人性生交大片免费看视频直播| 97精品视频在线观看| 亚洲国产精彩中文乱码av| 亚洲精品久久久久久久久| 国产精品成人免费电影| 亚洲二区在线播放视频| 亚洲天堂成人在线| 这里只有精品在线观看| 欧美裸体xxxx极品少妇| 高清欧美性猛交| 91在线观看欧美日韩| 日韩福利在线播放| 欧美高清视频在线| 久久亚洲影音av资源网| 97香蕉久久夜色精品国产| 国产精品国语对白| 综合av色偷偷网|