문제 설명 :
org.apache.cmmons.net.ftp.ftpclient를 사용하여 중국 디렉토리를 만들고 중국어 파일 이름을 업로드하면 중국 디렉토리와 파일 이름이 "?"로 표시됩니다.
이유:
FTP 프로토콜에서 파일 이름은 ISO-8859-1로 지정되므로 디렉토리 이름 또는 파일 이름을 전송해야합니다.
해결책:
1. 중국 디렉토리 또는 파일 이름을 ISO-8859-1 코딩 된 문자로 돌립니다. 참조 코드 :
다음과 같이 코드 코드를 복사하십시오.
문자열 이름 = "디렉토리 이름 또는 파일 이름";
name = new String (name.getBytes ( "gbk"), "iso-8859-1");
2. Linux 환경 변수 복사 코드 코드를 다음과 같이 설정하십시오.
내보내기 lc_all = "zh_cn.gbk"
내보내기 lang = "zh_cn.gbk"
예:
다음과 같이 코드 코드를 복사하십시오.
public boolean uploadfile (파일 파일, 문자열 경로, 문자열 filename)은 ioexception {
부울 결과 = 거짓;
ftpclient ftpclient = 새로운 ftpclient ();
노력하다 {
ftpclient.connect (confservice.getConfValue (portalConfContants.ftp_client_host)) ;;);
ftpclient.login (confservice.getconfvalue (portalconfcontants.ftp_client_username), confservice, confservice
.getConfValue (portalConfContants.ftp_client_password));
ftpclient.setFileType (ftpclient.binary_file_type);
// 디렉토리를 만듭니다
if (path! = null &&! "".
문자열 [] pathes = path.split ( "/");
for (string onepath : pather) {
ifpath == ulull ||.
계속하다;
}
onepath = new String (onepath.getBytes ( "gbk"), "iso-8859-1");
if (! ftpclient.changeworkingDirectory (onepath)) {
ftpclient.makedirectory (Onepath);
ftpclient.changeworkingdirectory (onepath);
}
}
}
result = ftpclient.storefile (new String (filename.getBytes ( "gbk"), "iso-8859-1"), new FileInputStream (file));
} catch (예외 e) {{
e.printstacktrace ();
} 마지막으로 {
ftpclient.logout ();
}
반환 결과;
}