posts - 11,comments - 17,trackbacks - 0
          import ?java.io.InputStream;
          import ?java.util.Properties;

          import ?org.apache.commons.net.ftp.FTPClient;
          import ?org.apache.commons.net.ftp.FTPClientConfig;
          import ?org.apache.commons.net.ftp.FTPReply;
          import ?org.uranus.util.StringUtils;

          /**
          *?基于apache組織的commonNet開源組件實現(xiàn)ftp客戶端<br>
          *?本程序運行依賴于一個config成員變量屬性,其是一個屬性(Properties)對象<br>
          *?系統(tǒng)要求這個config對象,必需有如下屬性key:<br>
          *?server(ftp服務器ip地址或域名)<br>
          *?username(登錄用戶名)<br>
          *?password(登錄密碼)<br>
          *?如下屬性key是可選的:<br>
          *?systemKey(ftp服務器的操作系統(tǒng)key,如window)<br>
          *?serverLanguageCode(ftp服務器使用的語言,如zh)<br>
          *?<br>
          *?本程序是線程安全,在每一個上傳時都將創(chuàng)建ftp連接,上傳結束后再關閉ftp連接<br>
          *
          *?例子:<br>
          *?InputStream?localIn?=?new?FileInputStream("c:\\計算機.txt");<br>
          *
          *?java.util.Properties?config?=?new?Properties();<br>
          *?config.setProperty("server",?"192.168.5.120");<br>
          *?config.setProperty("username",?"upload");<br>
          *?config.setProperty("password",?"upload");<br>
          *
          *?FtpClientCommonNetImpl?client?=?new?FtpClientCommonNetImpl();<br>
          *?client.setConfig(config);<br>
          *?client.upload(localIn,?"/aaa/計算機.txt",?true);<br>
          *
          *
          *?
          @author ?zhangdb
          *
          */

          public ? class ?FtpClientCommonNetImpl? implements ?IFtpClient? {
          // ?ftp配置
          private ?Properties?config;

          /**
          *?連接到ftp服務器
          *
          *?
          @param ?server
          *?
          @param ?userName
          *?
          @param ?password
          *?
          @return
          *?
          @throws ?FtpException
          */

          protected ?FTPClient?connectFtpServer(String?server,?String?userName,
          String?password)?
          throws ?FtpException? {
          // ?創(chuàng)建ftp客戶端對象
          FTPClient?ftp? = ? new ?FTPClient();
          try ? {
          ftp.configure(
          this .getFTPClientConfig());
          // ?連接ftp服務器
          ftp.connect(server);
          // ?登錄
          ftp.login(userName,?password);

          // ?返回值
          int ?reply? = ?ftp.getReplyCode();
          if ?(( ! FTPReply.isPositiveCompletion(reply)))? {
          ftp.disconnect();
          throw ? new ?FtpException( " 登錄ftp服務器失敗,請檢查server[ " ? + ?server
          + ? " ]、username[ " ? + ?userName? + ? " ]、password[ " ? + ?password
          + ? " ]是否正確! " );
          }


          return ?ftp;
          }
          ? catch ?(Exception?ex)? {
          throw ? new ?FtpException(ex);
          }

          }


          /**
          *?關閉連接
          *
          *?
          @param ?ftp
          */

          protected ? void ?disconnectFtpServer(FTPClient?ftp)? {
          try ? {
          ftp.logout();
          ftp.disconnect();
          }
          ? catch ?(Exception?ex)? {
          throw ? new ?FtpException(ex);
          }

          }


          /**
          *?上傳
          */

          public ? void ?upload(InputStream?localIn,?String?remoteFilePath)
          throws ?FtpException? {
          String?server?
          = ? this .config.getProperty( " server " );
          String?userName?
          = ? this .config.getProperty( " username " );
          String?password?
          = ? this .config.getProperty( " password " );
          FTPClient?ftp?
          = ? this .connectFtpServer(server,?userName,?password);

          try ? {
          boolean ?result? = ?ftp.storeFile( this
          .enCodingRemoteFilePath(remoteFilePath),?localIn);
          if ?( ! result)? {
          throw ? new ?FtpException( " 文件上傳失敗! " );
          }

          }
          ? catch ?(Exception?ex)? {
          throw ? new ?FtpException(ex);
          }
          ? finally ? {
          this .disconnectFtpServer(ftp);
          }

          }


          /**
          *?上傳結束以后關閉輸入流
          *
          *?
          @param ?localIn
          *?
          @param ?remoteFilePath
          *?
          @param ?afterUploadCloseInputStream
          *?
          @throws ?FtpException
          */

          public ? void ?upload(InputStream?localIn,?String?remoteFilePath,
          boolean ?afterUploadCloseInputStream)? throws ?FtpException? {
          try ? {
          // ?上傳
          this .upload(localIn,?remoteFilePath);
          }
          ? finally ? {
          if ?(afterUploadCloseInputStream)? {
          if ?(localIn? != ? null )? {
          try ? {
          localIn.close();
          }
          ? catch ?(Exception?ex)? {
          throw ? new ?FtpException(ex);
          }

          }

          }

          }

          }


          /**
          *?得到配置
          *
          *?
          @return
          */

          protected ?FTPClientConfig?getFTPClientConfig()? {
          // ?創(chuàng)建配置對象
          FTPClientConfig?conf? = ? new ?FTPClientConfig( this .config.getProperty(
          " systemKey " ,?FTPClientConfig.SYST_NT));
          conf.setServerLanguageCode(
          this .config.getProperty(
          " serverLanguageCode " ,? " zh " ));
          return ?conf;
          }


          /**
          *?遠程文件路徑編碼(上傳到ftp上的文件路徑)
          *
          *?
          @param ?remoteFilePath
          *?
          @return
          */

          protected ?String?enCodingRemoteFilePath(String?remoteFilePath)? {
          return ?StringUtils.gbkToIso8859EnCoding(remoteFilePath);
          }


          public ?Properties?getConfig()? {
          return ?config;
          }


          public ? void ?setConfig(Properties?config)? {
          this .config? = ?config;
          }


          }
          ?
          posted on 2007-03-28 19:42 Ken.Lee 閱讀(1061) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 凌海市| 凤翔县| 许昌市| 密云县| 兴城市| 康平县| 通州区| 永昌县| 阳泉市| 文山县| 濮阳市| 板桥市| 白银市| 石台县| 神池县| 昆山市| 南皮县| 崇仁县| 法库县| 九寨沟县| 潢川县| 山阴县| 砀山县| 周口市| 从江县| 元朗区| 建德市| 上林县| 定日县| 湾仔区| 安图县| 商城县| 新密市| 昆山市| 万荣县| 六盘水市| 大渡口区| 苍溪县| 依安县| 时尚| 贺州市|