【发布时间】:2015-07-21 08:58:26
【问题描述】:
下面的代码适用于我尝试过的另外两个网站,但不适用于我由 1and1 托管的域。返回代码始终为 500 - 永久否定完成回复。
我知道我正在连接,因为 FTPReply.isPositiveCompletion(reply) 返回 true。我尝试从手机存储中读取文件并从代码中早期填充的字节数组发送它。这是字节数组。两者都返回 500。两者都在其他网站上工作。
如果我不使用 enterLocalPassiveMode() 代码将停止在 storeFile 调用上执行。没有例外,没有套接字超时。它只是在那里结束,异步任务不会在该会话中再次调用。该代码不会在其他网站上执行此操作。
我已经尝试过 ASCII 和 BINARY 文件类型。两者都返回 500。1and1 站点说使用我的域和端口 21。我可以连接 CoreFTP 并使用我设置的两个帐户进行读写。
我也厌倦了 ftp4j,并且在所有情况下都有相同的响应,所以回到 Apache,因为代码已经编写了强大的错误捕获。
我已经尝试过 mydomain.com 和 ftp.mydomian.com。两个500。我还尝试了可以在 CoreFTP 窗口中看到的点四边形,但我得到“无法解析主机名”的 Apache Java 代码。也许不是静态 IP?
这就是 CoreFTP 所做的。它连接到端口 21,然后进入被动模式和 ASCII 数据连接。
这是一个很长的机会,但有其他人曾经在 Android Studio 中使用 Java 将 FTP 传输到他们的 1and1 域吗?
格雷格
正在解析 mydomain.com...
将套接字 #5684 连接到 xx.xx.xx.xxx,端口 21...
220 微软 FTP 服务
用户 ftp79815757-0
ftp79815757-0 需要 331 密码。
通过 **********
230 用户已登录。
系统
215 Windows_NT
活下去……
残疾人
257 "/ftp79815757-0" 是当前目录。
PASV
227 进入被动模式(xx,xxx,xx,xxx,xxx,xxx)。
列表
将套接字 #5700 连接到 xx.xx.xx.xx,端口 62894...
150 打开 ASCII 模式数据连接。
226 传输完成。
在 0.094 秒内传输了 51 个字节
FTPClient mFtpClient = new FTPClient();
String ip = "my domain dot com";
String userName = "ftp79815757-0";
String pass = "password";
mFtpClient.connect(InetAddress.getByName(ip));
mFtpClient.login(userName, pass);
int reply = mFtpClient.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
mFtpClient.setFileType(FTP.BINARY_FILE_TYPE);
//one thread said this would do the trick
mFtpClient.enterLocalPassiveMode();
mFtpClient.enterRemotePassiveMode();
InputStream stream = new ByteArrayInputStream(imageData);
//I have two accounts. One points to images_in
/*if (!mFtpClient.changeWorkingDirectory("images_in")) {
Log.e("ChangeDir", String.valueOf(mFtpClient.getReplyCode()));
}*/
if (!mFtpClient.storeFile("remoteName.jpg", stream)) {
Log.e("FTPUpload", String.valueOf(mFtpClient.getReplyCode()));
}
stream.close();
mFtpClient.disconnect();
}
【问题讨论】: