利用FTPClient上傳的檔案中中文名字亂碼解決辦法
阿新 • • 發佈:2019-01-10
新增下面這一段:
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {// 開啟伺服器對UTF-8的支援,如果伺服器支援就用UTF-8編碼,否則就使用本地編碼(GBK).
charSet = "UTF-8";
}
ftpClient.setControlEncoding(charSet);
public static boolean upload(String ip, String userName, String passWord, int port, String charSet, String sourceFileUrl, String ftpGoalDir, ArrayList<String> fileNameList) throws Exception { // 上傳不成功 boolean res = false; // 建立一個連線FTP伺服器物件 FTPClient ftpClient = new FTPClient(); // 建立一個檔案寫入流物件 FileInputStream fis = null; try { // 連線FTP伺服器 ftpClient.connect(ip, port); // 登入FTP連線 ftpClient.login(userName, passWord); // 在ftp上建立同名資料夾 if (sourceFileUrl.substring( sourceFileUrl.lastIndexOf(File.separator) + 1).length() > 0) { ftpGoalDir = ftpGoalDir + File.separator + sourceFileUrl.substring(sourceFileUrl .lastIndexOf(File.separator) + 1); } if (!isDirExist(ftpClient, ftpGoalDir)) { boolean ff = makeDir(charSet, ftpClient, ftpGoalDir); if (ff == false) { throw new Exception("建立資料夾" + ftpGoalDir + "出錯!"); } } for (int i = 0; i < fileNameList.size(); i++) { // 建立檔案物件 File srcFile = new File(sourceFileUrl + File.separator + fileNameList.get(i)); // 向FTP伺服器寫入檔案 fis = new FileInputStream(srcFile); if (i == 0) { // 設定上傳目錄 boolean flag = ftpClient.changeWorkingDirectory(new String( ftpGoalDir.getBytes(charSet), "ISO-8859-1")); System.out.println(flag); } // 向目標伺服器寫入檔案大小限制 ftpClient.setBufferSize(1024 * 1024); // // 設定檔案型別(二進位制) ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); if (FTPReply.isPositiveCompletion(ftpClient.sendCommand( "OPTS UTF8", "ON"))) { // 開啟伺服器對UTF-8的支援,如果伺服器支援就用UTF-8編碼,否則就使用本地編碼(GBK). charSet = "UTF-8"; } ftpClient.setControlEncoding(charSet); boolean flag = ftpClient.storeFile( new String(fileNameList.get(i).getBytes(charSet), "ISO-8859-1"), fis); System.out.println(flag); res = true; fis.close(); } System.out.println("upload successful!"); } catch (IOException e) { throw new RuntimeException("FTP客戶端出錯!", e); } finally { try { ftpClient.disconnect(); } catch (IOException e) { throw new RuntimeException("關閉FTP連線發生異常!", e); } } return res; }