我已经阅读了六个关于此问题的主题并且我没有更接近解决方案的地方。无论我改变什么,我都会得到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;
}
}
答案 0 :(得分:0)
您忘了设置文件类型
mFtpClient.setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
如果它仍然不起作用,那么您有以下选项:
如果您坚持使用Apache FTP Client
,请按照this example
或者您可以尝试this example
第二个例子适用于我的情况。
答案 1 :(得分:0)
您需要使用:enterLocalPassiveMode
mFtpClient.enterLocalPassiveMode();
如果您随后执行其他操作,则可能必须使用enterLocalActiveMode恢复活动状态。