【发布时间】:2015-07-20 14:08:06
【问题描述】:
我已经阅读了半打关于此的主题,但我离解决方案还很近。无论我改变什么,我都会得到 ftp 返回码 500“命令未被接受,请求的操作没有发生。”而且我不确定如何调试它。
这是我的网站,我可以连接 CoreFTP 并进行读写,所以这似乎不是权限问题。我尝试了两个不同的帐户,使用此代码和 CoreFTP。一个写入根目录,另一个指向“image_in”文件夹。
imageData 是一个长度为 166578 的字节数组,在 InputStream 调用后,stream 的长度相同。 storeFile() 总是返回 false,返回码为 500。
一个线程暗示 enterLocalPassiveMode() 和 enterRemotePassiveMode() 是罪魁祸首,但我已经尝试了这段代码,无论有没有这些行,我仍然得到 500 返回码。
知道我错过了什么吗?
格雷格
class ImageUploadTask extends AsyncTask <Void, Void, String>{
@Override
protected String doInBackground(Void... unsued) {
try {
boolean status = false;
try {
FTPClient mFtpClient = new FTPClient();
String ip = "my domain dot com";
String userName = "ftp79815757-0";
String pass = "my password";
mFtpClient.connect(InetAddress.getByName(ip));
mFtpClient.login(userName, pass);
int reply = mFtpClient.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
//one thread said this would do the trick
mFtpClient.enterLocalPassiveMode();
mFtpClient.enterRemotePassiveMode();
InputStream stream = new ByteArrayInputStream(imageData);
mFtpClient.changeWorkingDirectory("/images_in");
String currdir = mFtpClient.printWorkingDirectory();
if (!mFtpClient.storeFile("remoteName.jpg", stream)) {
Log.e("FTPUpload", String.valueOf(mFtpClient.getReplyCode()));
}
stream.close();
mFtpClient.disconnect();
}
else {
Log.e("FTPConnected", String.valueOf(reply));
}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} catch (Exception e) {
if (dialog.isShowing())
dialog.dismiss();
Toast.makeText(getApplicationContext(),
"Error",
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(), e.getMessage(), e);
return null;
}
}
【问题讨论】:
-
您还有其他异常吗?您是否在 Manifest.xml 中添加了所需的权限?
-
代码中没有 Java 异常,也没有其他 FTP 异常。清单中的权限是 Internet、写入外部存储和读取联系人。当我合并 FTP 时添加了 Internet。是否需要其他清单权限?
-
我还尝试将端口显式设置为 21,并且我同时使用 mFtpClient.setFileType(FTP.ASCII_FILE_TYPE) 和 mFtpClient.setFileType(FTP.BINARY_FILE_TYPE);仍然得到返回码 500,
-
所以您想使用 FTP 从 android 上传文件 .. 您在互联网上关注哪个示例?如果您使用的是
ftp4j,那么有很多工作示例 -
是的,来自安卓的 ftp。我见过的所有示例都使用 org.apache.commons.net.ftp.FTP