1. 程式人生 > >Linux做Ftp上傳ftp.storeFile返回

Linux做Ftp上傳ftp.storeFile返回

ftp.storeFile(filename, input) 這個會報錯,中文檔案上傳會報錯 ftp.storeFile(new String(filename.getBytes(“GBK”),“iso-8859-1”), input) 這個就解決這個問題了 public boolean fileUpload(String path,String filename,InputStream input) { FTPClient ftp=new FTPClient(); try { ftp.connect(host, port); ftp.login(username, password); //設定檔案編碼格式 ftp.setControlEncoding(“UTF-8”); //ftp通訊有兩種模式 //PORT(主動模式)客戶端開通一個新埠(>1024)並通過這個埠傳送命令或傳輸資料,期間服務端只使用他開通的一個埠,例如21 //PASV(被動模式)客戶端向服務端傳送一個PASV命令,服務端開啟一個新埠(>1024),並使用這個埠與客戶端的21埠傳輸資料 //由於客戶端不可控,防火牆等原因,所以需要由服務端開啟埠,需要設定被動模式 ftp.enterLocalPassiveMode(); //設定傳輸方式為流方式 ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); //獲取狀態碼,判斷是否連線成功 if(!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { throw new RuntimeException(“FTP伺服器拒絕連線”); } //轉到上傳檔案的根目錄 if(!ftp.changeWorkingDirectory(basePath)) { throw new RuntimeException(“根目錄不存在,需要建立”); } //判斷是否存在目錄 if(!ftp.changeWorkingDirectory(basePath+path)) { String[] dirs=path.split("/"); //建立目錄 for (String dir : dirs) { if(null==dir||"".equals(dir)) continue; //判斷是否存在目錄 if(!ftp.changeWorkingDirectory(dir)) { //不存在則建立 if(!ftp.makeDirectory(dir)) { throw new RuntimeException(“子目錄建立失敗”); } //進入新建立的目錄 ftp.changeWorkingDirectory(dir); } } //設定上傳檔案的型別為二進位制型別 ftp.setFileType(FTP.BINARY_FILE_TYPE); //上傳檔案 if(!ftp.storeFile(new String(filename.getBytes(“GBK”),“iso-8859-1”), input)

) { return false; } input.close(); ftp.logout(); return true; }

    } catch (Exception e) {
        throw new RuntimeException(e);
    }finally {
        if(ftp.isConnected()) {
            try {
                ftp.disconnect();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    return false;
}