?
最近做ftp上传遇到问题,最终解决,现在分享给大家。
这里有三点:
1、将字符串转换成输入流
class="java">String s = "this is my test string 中国"; //将字符串转换成输入流 ByteArrayInputStream fis = new ByteArrayInputStream(s.getBytes());
?2、设置编码
ftp.setControlEncoding("GBK");
?3、设置为被动模式
ftp.enterLocalPassiveMode();
?最终测试代码如下:
package ftpTest; import java.io.ByteArrayInputStream; import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; public class ApacheFtpTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String s = "this is my test string 中国"; //将字符串转换成输入流 ByteArrayInputStream fis = new ByteArrayInputStream(s.getBytes()); FTPClient ftp = new FTPClient(); //host,端口 ftp.connect("127.0.0.1", 21); //必须设置,上传非iisc文件,如果不设置默认是iisc码格式传输,导致文件坏死 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); //如果遍历文件名乱码,请设置为GBK,或者你需要的编码 ftp.setControlEncoding("GBK"); //超时时间必须设置,方式长时间连接没响应 ftp.setControlKeepAliveReplyTimeout(15000); ftp.setConnectTimeout(15000); ftp.setControlKeepAliveTimeout(15000); //设置被动模式,在很多情况下由于防火墙等原因,主动模式不支持。 ftp.enterLocalPassiveMode(); //帐户密码 ftp.login("帐户", "密码"); System.out.println("login success"); //服务器路径 ftp.changeWorkingDirectory("/"); //上传文件名称 ftp.storeFile("test.txt", fis); ftp.logout(); } }
?
?