當前位置:編程學習大全網 - 源碼下載 - FTP上傳時怎麽解決中文路徑和中文名稱

FTP上傳時怎麽解決中文路徑和中文名稱

java上傳文件到ftp有兩種實現方式,壹種是使用sun公司提供的sun.net.ftp包裏面的FtpClient,另壹種是Apache組織提供的org.apache.commons.net.ftp包裏的FTPClient,現在我來分別說下兩種實現方式。

sun的FtpClient:我們先來看如下代碼

public static boolean uploadFileBySun(StringBuffer fileContent,String server,String userName, String userPassword, String path, String fileName) {

FtpClient ftpClient = new FtpClient();

try {

//打開ftp服務器

ftpClient.openServer(server);

//使用指定用戶登錄

ftpClient.login(userName, userPassword);

//轉到指定路徑

ftpClient.cd(path);

TelnetOutputStream os = null;

//新建壹個文件

// os = ftpClient.put(new String(fileName.getBytes("GBK"), "iso-8859-1"));

os = ftpClient.put(fileName);

OutputStreamWriter osw = new OutputStreamWriter(os);

BufferedWriter bw = new BufferedWriter(osw);

bw.write(fileContent.toString());

bw.flush();

bw.close();

} catch (Exception e) {

System.out.println(e.getMessage());

return false;

} finally {

try {

//關閉ftp連接

ftpClient.closeServer();

} catch (Exception e) {

e.printStackTrace();

}

}

return true;

}

代碼結束符!

正如上面的代碼,上傳文件分為六步,第壹步,打開ftp服務器,第二步,使用指定用戶名以及密碼登陸,第三步,轉到指定文件路徑,第四步,創建壹個文件,第五步,往文件裏面寫東西,並關閉文件,第六步,釋放ftp連接。最後壹步釋放ftp連接很重要,壹般ftp服務器連接數都是有限的,所以不管文件上傳成功或是失敗都必須釋放連接。上面這個例子上傳的文件是字符串文本,必須要提的是,如果上傳的字符串文本較長(我項目中上傳的文本大概在160kb上下),使用上面的方法可能會出現字符串丟失的情況,原因不明,可能跟緩存有關,所以如果文本較長,建議用戶使用字節流。還有壹個問題,如果要上傳的文件名是中文的話,上傳的文件名將是亂碼,亂碼問題我嘗試許多轉碼也解決不了,於是不得不使用下面的方法了。

Apache的FTPClient:

public static boolean uploadFileByApacheByBinary(StringBuffer fileContent,String server,String userName, String userPassword, String path, String fileName) {

FTPClient ftpClient = new FTPClient();

try {

InputStream is = null;

is = new ByteArrayInputStream(fileContent.toString().getBytes());

ftpClient.connect(server);

ftpClient.login(userName, userPassword);

ftpClient.changeWorkingDirectory(path);

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

ftpClient.storeFile(new String(fileName.getBytes("GBK"), "iso-8859-1") , is);

is.close();

} catch (Exception e) {

e.printStackTrace();

return false;

} finally {

if(ftpClient.isConnected()) {

try {

ftpClient.disconnect();

} catch (Exception e) {

e.printStackTrace();

}

}

}

return true;

}

代碼結束符!

Apache上傳文件的步驟跟sun的實現基本壹致,只是方法名有些區別而已。在這裏我將字符串文本轉換成了ByteArrayInputStream字節緩沖流,這是個很有用的東西,常用來進行字符到流的轉換。轉換成字節上傳就不會出現丟失文件內容的情況了。ftpClient.storeFile(new String(fileName.getBytes(“GBK”), “iso-8859-1″) , is)這句代碼將is輸入流的東西上傳到ftp服務器的fileName文件中,在這裏我們對fileName文件名進行了轉碼,經測試中文沒有亂碼(ftp服務器使用的是window,其他平臺未測試),而如果我們使用sun的ftp實現,即使文件名進行這樣類似的轉碼,依然是亂碼。

  • 上一篇:如何編輯快影的視頻教學視頻教程?
  • 下一篇:如何運用績效考核提升企業的盈利能力
  • copyright 2024編程學習大全網