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