當前位置:首頁 » 文件管理 » ftp上傳文件亂碼

ftp上傳文件亂碼

發布時間: 2025-02-24 05:18:41

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實現,即使文件名進行這樣類似的轉碼,依然是亂碼。

⑵ 困擾很久了,windows主機通過FTP上傳文件到linux,文件名、擴展名亂碼

可能是沒有採用二進制方式上傳,有些php加密文件是要用二進制方式上傳的,否則不能用。在FTP軟體的設置裡面就可以調整。不過文件名和擴展名一般都是英文的,比如indexphp,不大可能會出現亂碼的。不要用中文名稱做程序文件名。

⑶ 為什麼用瀏覽器訪問自己架設的FTP中文幾乎都是亂碼

1、打開Serv-U控制台,點擊「限制和設置」--「為域配置高級FTP命令設置和行為」。

2、在FTP設置中找到OPTSUTF8命令,右擊禁用此命令。

3、點擊下面的「全局屬性」。
4、在出來的FTP命令屬性選項卡中,「高級選項」里,把「對所有收發的路徑和文件名使用UFT-8編碼」前面的鉤去掉!

5、以後再上傳中文文件,就不會出現亂碼問題啦。

FTP是FileTransferProtocol(文件傳輸協議)的英文簡稱,而中文簡稱為「文傳協議」。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。

⑷ win7ftp文件名亂碼

解決方法:

1、右擊「開始」菜單,選擇「資源管理器」菜單項;

2、打開「資源管理器」窗口。接著,把窗口地址欄後的內容清空,輸入要打開的FTP站點回車;

3、在彈出的對話框中輸入相應的用戶名和密碼,回車後即可打開該站點,這樣就不會出現亂碼了。

⑸ 從文件裡面打開ftp,裡面文件全亂碼,為什麼

摘要 1點擊 輸入法圖標,然後點擊 「語言首選項」;

⑹ FTP鏈接伺服器時 出現這個文件 顯示亂碼 打不開 也沒法下載 什麼原因

可能是中文文件,伺服器又不支持中文,導致亂碼
你可以登錄ssh,然後對這個文件重命名,再下載就OK了~
無法重命名的時候,可以嘗試mv *.txt test.txt,泛規則匹配~

熱點內容
ftp服務應在哪裡設置 發布:2025-02-24 08:12:08 瀏覽:177
keil編程編譯時顯示目標未創建 發布:2025-02-24 08:10:51 瀏覽:644
我的世界ec伺服器怎麼組 發布:2025-02-24 08:10:50 瀏覽:518
linuxnetbeans 發布:2025-02-24 08:03:42 瀏覽:749
雲伺服器搭建無線流量 發布:2025-02-24 08:00:11 瀏覽:637
營銷型網站源碼 發布:2025-02-24 08:00:05 瀏覽:352
招標伺服器認電腦嘛 發布:2025-02-24 07:53:10 瀏覽:79
python取文件名 發布:2025-02-24 07:37:56 瀏覽:397
android與ios規范 發布:2025-02-24 07:24:05 瀏覽:914
c語言結束循環 發布:2025-02-24 07:21:53 瀏覽:430