1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Java實(shí)現(xiàn)上傳文件到服務(wù)器指定目錄的方法

      這篇文章主要講解了Java實(shí)現(xiàn)上傳文件到服務(wù)器指定目錄的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

      創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)蒲縣,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

      前言需求

      使用freemarker生成的靜態(tài)文件,統(tǒng)一存儲(chǔ)在某個(gè)服務(wù)器上。本來(lái)一開始打算使用ftp實(shí)現(xiàn)的,奈何老連接不上,改用jsch。畢竟有現(xiàn)成的就很舒服,在此介紹給大家。

      具體實(shí)現(xiàn)

      引入的pom

      
      	ch.ethz.ganymed
      	ganymed-ssh3
      	262
      
      
      
      	com.jcraft
      	jsch
      	0.1.55
      

      建立實(shí)體類

      public class ResultEntity {
      
        private String code;
      
        private String message;
      
        private File file;
        
        public ResultEntity(){}
        
      	public ResultEntity(String code, String message, File file) {
      		super();
      		this.code = code;
      		this.message = message;
      		this.file = file;
      	}
      
      	public String getCode() {
      		return code;
      	}
      
      	public void setCode(String code) {
      		this.code = code;
      	}
      
      	public String getMessage() {
      		return message;
      	}
      
      	public void setMessage(String message) {
      		this.message = message;
      	}
      
      	public File getFile() {
      		return file;
      	}
      
      	public void setFile(File file) {
      		this.file = file;
      	}
        
      }

      public class ScpConnectEntity {
        private String userName;
        private String passWord;
        private String url;
        private String targetPath;
      
        public String getTargetPath() {
          return targetPath;
        }
      
        public void setTargetPath(String targetPath) {
          this.targetPath = targetPath;
        }
      
        public String getUserName() {
          return userName;
        }
      
        public void setUserName(String userName) {
          this.userName = userName;
        }
      
        public String getPassWord() {
          return passWord;
        }
      
        public void setPassWord(String passWord) {
          this.passWord = passWord;
        }
      
        public String getUrl() {
          return url;
        }
      
        public void setUrl(String url) {
          this.url = url;
        }
      
      }

      建立文件上傳工具類

      @Configuration

      @Configuration
      public class FileUploadUtil {
      
        @Value("${remoteServer.url}")
        private String url;
      
        @Value("${remoteServer.password}")
        private String passWord;
      
        @Value("${remoteServer.username}")
        private String userName;
      
        @Async
        public ResultEntity uploadFile(File file, String targetPath, String remoteFileName) throws Exception{
          ScpConnectEntity scpConnectEntity=new ScpConnectEntity();
          scpConnectEntity.setTargetPath(targetPath);
          scpConnectEntity.setUrl(url);
          scpConnectEntity.setPassWord(passWord);
          scpConnectEntity.setUserName(userName);
      
          String code = null;
          String message = null;
          try {
            if (file == null || !file.exists()) {
              throw new IllegalArgumentException("請(qǐng)確保上傳文件不為空且存在!");
            }
            if(remoteFileName==null || "".equals(remoteFileName.trim())){
              throw new IllegalArgumentException("遠(yuǎn)程服務(wù)器新建文件名不能為空!");
            }
            remoteUploadFile(scpConnectEntity, file, remoteFileName);
            code = "ok";
            message = remoteFileName;
          } catch (IllegalArgumentException e) {
            code = "Exception";
            message = e.getMessage();
          } catch (JSchException e) {
            code = "Exception";
            message = e.getMessage();
          } catch (IOException e) {
            code = "Exception";
            message = e.getMessage();
          } catch (Exception e) {
            throw e;
          } catch (Error e) {
            code = "Error";
            message = e.getMessage();
          }
          return new ResultEntity(code, message, null);
        }
      
      
        private void remoteUploadFile(ScpConnectEntity scpConnectEntity, File file,
                       String remoteFileName) throws JSchException, IOException {
      
          Connection connection = null;
          ch.ethz.ssh3.Session session = null;
          SCPOutputStream scpo = null;
          FileInputStream fis = null;
      
          try {
            createDir(scpConnectEntity);
          }catch (JSchException e) {
            throw e;
          }
      
          try {
            connection = new Connection(scpConnectEntity.getUrl());
            connection.connect();
      
            if(!connection.authenticateWithPassword(scpConnectEntity.getUserName(),scpConnectEntity.getPassWord())){
              throw new RuntimeException("SSH連接服務(wù)器失敗");
            }
            session = connection.openSession();
      
            SCPClient scpClient = connection.createSCPClient();
      
            scpo = scpClient.put(remoteFileName, file.length(), scpConnectEntity.getTargetPath(), "0666");
            fis = new FileInputStream(file);
      
            byte[] buf = new byte[1024];
            int hasMore = fis.read(buf);
      
            while(hasMore != -1){
              scpo.write(buf);
              hasMore = fis.read(buf);
            }
          } catch (IOException e) {
            throw new IOException("SSH上傳文件至服務(wù)器出錯(cuò)"+e.getMessage());
          }finally {
            if(null != fis){
              try {
                fis.close();
              } catch (IOException e) {
                e.printStackTrace();
              }
            }
            if(null != scpo){
              try {
                scpo.flush();
      //          scpo.close();
              } catch (IOException e) {
                e.printStackTrace();
              }
            }
            if(null != session){
              session.close();
            }
            if(null != connection){
              connection.close();
            }
          }
        }
      
      
        private boolean createDir(ScpConnectEntity scpConnectEntity ) throws JSchException {
      
          JSch jsch = new JSch();
          com.jcraft.jsch.Session sshSession = null;
          Channel channel= null;
          try {
            sshSession = jsch.getSession(scpConnectEntity.getUserName(), scpConnectEntity.getUrl(), 22);
            sshSession.setPassword(scpConnectEntity.getPassWord());
            sshSession.setConfig("StrictHostKeyChecking", "no");
            sshSession.connect();
            channel = sshSession.openChannel("sftp");
            channel.connect();
          } catch (JSchException e) {
            e.printStackTrace();
            throw new JSchException("SFTP連接服務(wù)器失敗"+e.getMessage());
          }
          ChannelSftp channelSftp=(ChannelSftp) channel;
          if (isDirExist(scpConnectEntity.getTargetPath(),channelSftp)) {
            channel.disconnect();
            channelSftp.disconnect();
            sshSession.disconnect();
            return true;
          }else {
            String pathArry[] = scpConnectEntity.getTargetPath().split("/");
            StringBuffer filePath=new StringBuffer("/");
            for (String path : pathArry) {
              if (path.equals("")) {
                continue;
              }
              filePath.append(path + "/");
              try {
                if (isDirExist(filePath.toString(),channelSftp)) {
                  channelSftp.cd(filePath.toString());
                } else {
                  // 建立目錄
                  channelSftp.mkdir(filePath.toString());
                  // 進(jìn)入并設(shè)置為當(dāng)前目錄
                  channelSftp.cd(filePath.toString());
                }
              } catch (SftpException e) {
                e.printStackTrace();
                throw new JSchException("SFTP無(wú)法正常操作服務(wù)器"+e.getMessage());
              }
            }
          }
          channel.disconnect();
          channelSftp.disconnect();
          sshSession.disconnect();
          return true;
        }
      
        private boolean isDirExist(String directory,ChannelSftp channelSftp) {
          boolean isDirExistFlag = false;
          try {
            SftpATTRS sftpATTRS = channelSftp.lstat(directory);
            isDirExistFlag = true;
            return sftpATTRS.isDir();
          } catch (Exception e) {
            if (e.getMessage().toLowerCase().equals("no such file")) {
              isDirExistFlag = false;
            }
          }
          return isDirExistFlag;
        }
      }

      屬性我都寫在Spring的配置文件里面了。將這個(gè)類托管給spring容器。

      看完上述內(nèi)容,是不是對(duì)Java實(shí)現(xiàn)上傳文件到服務(wù)器指定目錄的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      標(biāo)題名稱:Java實(shí)現(xiàn)上傳文件到服務(wù)器指定目錄的方法
      瀏覽路徑:http://www.ef60e0e.cn/article/posejh.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        绩溪县| 婺源县| 光泽县| 石林| 崇礼县| 泾川县| 牡丹江市| 阿城市| 黔东| 漾濞| 定结县| 阳城县| 香港| 涡阳县| 古田县| 平陆县| 长寿区| 常熟市| 积石山| 灌云县| 嵩明县| 溧阳市| 铜山县| 宁德市| 德江县| 香河县| 江川县| 壤塘县| 米林县| 德钦县| 巫山县| 讷河市| 望城县| 新蔡县| 大同县| 泾川县| 卓资县| 任丘市| 陈巴尔虎旗| 舞钢市| 博罗县|