关于FTPClient上传文件,返回true,但是服务器上没有文件。

lucienlugeek 2015-09-16 03:27:47
我单独在普通Java项目中测试是可以的,但是把同样的代码放到web工程中,就出现如题所述的问题。
下面我贴一下关键部分的代码,也就是封装的实现上传功能的工具类,各位帮忙看看到底是何原因。

package org.zkforge.petshop.util;

import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPUtil {
private static FTPClient ftpClient = new FTPClient();
static{
try {
ftpClient.connect("192.168.11.207");
ftpClient.login("myftp", "000");
ftpClient.setControlEncoding("GBK");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
int reply;
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* Upload file to FTP server and return the boolean result
* @param filename
* @param is
* @param path
* @return
*/
public static boolean upload(String filename,InputStream is,String path) {
try {
ftpClient.changeWorkingDirectory(path);
ftpClient.storeFile(filename, is);

is.close();
System.out.println("upload file success...");
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}

/**
* Return the instance of <code>FTPClient</code>
* @return
*/
public static FTPClient getFTPClient(){
return ftpClient;
}

/**
* close ftp connection
*/
public static void closeFTPConnection(){
try {
ftpClient.logout();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(ftpClient.isConnected()){
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
...全文
3394 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你把被动模式删除试试呢?默认的是主动模式
我遇到的问题是:在本地用默认的主动模式,数据状态显示上传成功,但是服务器上没有文件,前提是代码OK的
然后在本地加上了被动模式是OK的,上传都没问题了。但是,在测试环境,还是原来的被动模式,就不行上传失败,换了默认的主动模式,
就会出现数据上传成功,服务器没有文件的问题
九黎小康 2018-07-05
  • 打赏
  • 举报
回复
今天遇到了同样的问题,调试看java代码返回的是false。 然后使用客户端xfpt上传,发现也是上传不了。 然后开启了文件夹的访问权限:chmod 777 www/image 就成功了
Master-Yi 2017-08-05
  • 打赏
  • 举报
回复
请问楼主解决这个问题了吗,我也遇到了同样的问题。
lucienlugeek 2015-09-21
  • 打赏
  • 举报
回复
引用 1 楼 net_lover 的回复:
报告什么错误呢? upload(String filename,InputStream is,String path) 这里面的参数,你要分清楚,filename path 都是远程ftp服务器的文件和路径?还是本地服务器的文件和路径?
filename是设定上传到服务器的文件的名称,path是控制上传的目录,该目录就是ftp地址的根目录下的子目录,如果为null,就默认上传到根目录中。我如果在一个单纯的java测试程序中使用这个工具类,是可以上传指定文件的。但是放到一个web项目中,不会返回出错,但是服务器上并没有文件。我在想会不会是服务器里有什么参数没有设置好。这个服务器是我直接用windows自带的功能搭建的。
孟子E章 2015-09-16
  • 打赏
  • 举报
回复
报告什么错误呢?
upload(String filename,InputStream is,String path)
这里面的参数,你要分清楚,filename path 都是远程ftp服务器的文件和路径?还是本地服务器的文件和路径?

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧