我知道之前有很多类似的问题。我查看了所有这些并尝试了所有可能的解决方案,包括更改了几个FTP服务器,但我仍然无法解决我的问题。但FTP命令行没有问题。我也关闭了防火墙。这是我的代码片段:
ftpClient.login(username, password);
int mode = ftpClient.getDataConnectionMode();
if(mode == ftpClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE)
ftpClient.enterLocalPassiveMode();
else if(mode == ftpClient.ACTIVE_LOCAL_DATA_CONNECTION_MODE)
ftpClient.enterLocalActiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
//ftpClient.setPassiveNatWorkaround(false);
if(LOGD) Log.d("before create out");
String out = orderToString();
if(LOGD) Log.d("out="+out);
InputStream stream = new ByteArrayInputStream(out.getBytes("UTF-8"));
if(LOGD) Log.d("before upload orders.xml");
boolean res = ftpClient.storeFile("orders.xml", stream);
if(!res) Log.d("store file failed");
ftpClient.completePendingCommand();
stream.close();
这是logcat:
........................................
D / SalesManager(408):在创建D / SalesManager之前(408): out = D / SalesManager(408):D / SalesManager(408):
1 D / SalesManager(408):2013-10-06 12:07:39 D / SalesManager(408):1 D / SalesManager(408):617.25 D / SalesManager(408):D / SalesManager(408): D / SalesManager(408):在上传orders.xml之前D / SntpClient(60): 请求时间失败:java.net.SocketException:地址族不是 协议W / System.err支持(408): org.apache.commons.net.ftp.FTPConnectionClosedException:FTP响应 421收到。服务器关闭连接。 D / SntpClient(60):请求 时间失败:java.net.SocketException:不支持的地址族 协议 MainActivity $ LoadAsyncTask.doInBackground(MainActivity.java:1) W / System.err(408):at android.os.AsyncTask $ 2.call(AsyncTask.java:185)W / System.err(408):
在java.util.concurrent.FutureTask $ Sync。 innerRun(FutureTask.java:305) W / System.err(408):at java.util.concurrent.FutureTask.run(FutureTask.java:137) W / System.err(408):at java.util.concurrent.ThreadPoolExecutor。 runWorker(ThreadPoolExecutor.java:1068)W / System.err(408):at java.util.concurrent.ThreadPoolExecutor中的$工人。 运行(ThreadPoolExecutor.java:561)W / System.err(408):at java.lang.Thread.run(Thread.java:1096)
.......................
编辑我曾经成功下载了一个文本文件但从未上传过文本文件。在测试期间,我曾经上传了一半文本文件 - 在服务器上创建了一个空的同名文件。
答案 0 :(得分:0)
使用ftp4j解决了这个问题。几天浪费在commons.ftpclient
上答案 1 :(得分:0)
我通过删除completePendingCommand()成功将文件上传到FTP服务器。 只需storeFile + getReplyCode来检查响应代码。
ftpClient.setDefaultTimeout(1000*60);
ftpClient.connect(server, port);
ftpClient.login(user, pass);
int replyCode=ftpClient.getReplyCode();
//log or check response
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
InputStream inputStream=new FileInputStream(zipFile);
ftpClient.storeFile(zipFile.getName(), inputStream);
inputStream.close();
replyCode=ftpClient.getReplyCode();
//log or check response