下述代碼主要解決了因為中文標題的出現,而導致上傳文件出錯的問題!
代碼示例:
/**
* 上傳文件
*
* @param P_Files
*/
public static void uploadFile(File P_File)
{
if (P_File.exists())
{
String strFtpIp = getFtpIp()
String strUserName = getFtpUserName()
String strPassword = getFtpPassword()
FTPClient ftpClient = new FTPClient()
FileInputStream fis = null
try
{
// 連接服務
ftpClient.connect(strFtpIp)
ftpClient.login(strUserName, strPassword)
// 獲取臨時文件
// 文件路徑加上temp的目的是為了每次上傳的附件不被覆蓋,使用filename的目的是為了和數據庫保存的文件名是一樣的,這樣能夠根據數據庫中的文件名稱獲取到附件
String preFileName = P_File.getName()
if (preFileName != null && preFileName.length() > 0)
{
fis = new FileInputStream(P_File)
// 表示獲取的文件流是大于0字節以上,
if (fis.available() > 0)
{
ftpClient.setBufferSize(1024);// 設置1M緩沖,
ftpClient.setControlEncoding("GBK");// 設置編碼為GBK
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE)
if (ftpClient.storeFile(new String(preFileName.getBytes("GBK"), "iso-8859-1"), fis))
{
System.out.println(preFileName + "通過ftp上傳成功")
}
else
{
System.out.println(preFileName + "通過ftp上傳失敗")
}
}
else
{
System.out.println("fis is null,filepath=" + P_File.getPath())
}
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException("FTP客戶端出錯!", e)
}
finally
{
IOUtils.closeQuietly(fis)
try
{
ftpClient.disconnect()
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException("關閉FTP連接發生異常!", e)
}
}
}