我检查了你的代码,它的工作原理。我只将文件类型声明更改为二进制文件,这对于XML文件可能不需要。 这里是我完整的代码以供参考:
package apachenet.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class App {
public static void main(String[] args) {
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect(/*Util.getProductsXMLFTPServer()*/"127.0.0.1");
client.login(/*Util.getProductsXMLFTPUser()*/"pwyrwinski",
/*Util.getProductsXMLFTPPassword()*/"secret");
client.setFileType(FTP.BINARY_FILE_TYPE); // optional
fis = new FileInputStream(
new File(/* Util.getProductsXMLFTPInputFilePath() */"/home/pwyrwinski",
/* Util.getProductsXMLFTPOutputFileName() */"img.png"));
client.changeWorkingDirectory(/*Util.getProductsXMLFTPUploadPath()*/ "someDir");
client.storeFile(/*Util.getProductsXMLFTPOutputFileName()*/"img_bis.png", fis);
client.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
正如你可以看到它的大致一样的你。 Util
类调用被替换为原始数据。
当我运行它时,文件/home/pwyrwinski/img.png
上传到ftp服务器上的{FTP_USER_ROOT}/someDir
目录,名称更改为img_bis.png
。我认为这正是你想达到的目标。
让我们回到你的问题。
- 尝试检查从
Util.getProductsXMLFTPUploadPath()
返回的内容。我的猜测并不是你期待的 - 所以在你的IDE中进行调试或者打印到控制台。
- 检查从
Util.getProductsXMLFTPUploadPath()
返回的路径 调用以斜杠开始,它不应该。
更新1. 是否猪病/home/domainname/public_html/guest
服务器上存在吗?
添加下面的方法到类:
private static void showServerReply(FTPClient ftpClient) {
String[] replies = ftpClient.getReplyStrings();
if (replies != null && replies.length > 0) {
for (String aReply : replies) {
System.out.println("SERVER: " + aReply);
}
}
}
后每 FTP客户端的方法调用调用它。这将为您提供每个命令结果的代码和说明。我怀疑client.changeWorkingDirectory(...)
以错误结尾,可能是:550 Permission Denied (or No such file or folder)
。
下一页修改为:
client.login(Util.getProductsXMLFTPUser(), Util.getProductsXMLFTPPassword());
System.out.println(client.printWorkingDirectory()); // added this line!
这将告诉我们什么是在登录后,当前的工作目录
请发表您的结果。
我验证了路径。这是正确的。我尝试删除“/”,但它仍然是一样的。不要超出我提到的目录。 – 2013-03-03 02:05:15
我已更新我的文章(更新1)。 – 2013-03-03 03:04:23
非常感谢。这对我帮助很大。我将参数更改为“public_html/guest”而不是“/ home/domainuser/public_html/guest”。似乎它试图从当前位置查找完整的目录路径。它给了我一个错误消息,说目录不存在。再次感谢。它像魔术一样工作。 – 2013-03-08 05:55:59