FTPClient上传文件storeFile返回TRUE,但是却没有文件

开不了口1990 2014-11-14 02:11:31
连接是没问题的,目录也都创建了,stroreFile也返回true,但是就是没文件,不知道什么原因,下面是代码
public boolean ftpUpload(String path, Map<String, File> files, boolean clear){
FTPClient ftpClient = null;
FileInputStream fis = null;
try {
ftpClient = ftpConnect();
if(ftpClient == null){
log.info("连接FTP失败!");
return false;
}
path = changePath(path);
log.info("path:" + path);
for(String p : path.split("\\" + File.separator)){
if(StringUtil.isNullOrBlank(p)) continue;
if(!ftpClient.changeWorkingDirectory(p)){
if(!ftpClient.makeDirectory(p)){
log.info("创建目录失败,没有权限!");
return false;
}
ftpClient.changeWorkingDirectory(p);
}
}

log.info("FTP连接成功");
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();

Set<String> keys = files.keySet();
for(String key : keys){
fis = new FileInputStream(files.get(key));
if(ftpClient.storeFile(key, fis)){
log.info("上传到FTP成功," + key);
}else{
log.info("上传到FTP失败," + key);
return false;
}
if(fis != null)
fis.close();
}
return true;
} catch (Exception e) {
log.error("上传到FTP异常", e);
return false;
}finally{
try {
if(ftpClient.isConnected()){
ftpClient.disconnect();
}
if(fis != null){
fis.close();
}
//清理临时文件
if(clear && files.size() != 0){
for(String key : files.keySet()){
if(files.get(key).exists()){
files.get(key).delete();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
...全文
7474 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ym184767847 2016-12-21
  • 打赏
  • 举报
回复
ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE); ftp.enterLocalPassiveMode();//Switch to passive mode Store = ftp.storeFile(destinationfile, in); in.close();
lucienlugeek 2015-09-16
  • 打赏
  • 举报
回复
题主,我也遇到跟你类似的问题了。我连接到本地的FTP服务器,同样的代码,我单独用一个测试程序是可以实现上传的,但是当我应用在一个web项目中后,就出现了返回true,但是FTP实际没有文件的情况了。 题主你说的将路径写为全路径是什么意思?给个你解决后的示例代码看看。
daicheng556 2015-05-08
  • 打赏
  • 举报
回复
开不了口1990 2014-11-17
  • 打赏
  • 举报
回复
最后总结一下,我这个代码本身是没有问题的,在ServU下测试是通过,并且在其它的项目也正常运行。最后解决的办法是把原本的一级一级的创建目录,改成直接创建多级目录,写入文件的storeFile(filename, fis) 里的filename也用的全路径。虽然这样是成功了,但是我觉得原来的方法才更符合FTP标准。
开不了口1990 2014-11-14
  • 打赏
  • 举报
回复
引用 4 楼 l965820927 的回复:
看看你的日志记录呗
日志都是正常的,觉得可能是FTP被动模式什么的问题。也可能是对方的FTP服务器不是很标准
l965820927 2014-11-14
  • 打赏
  • 举报
回复
看看你的日志记录呗
开不了口1990 2014-11-14
  • 打赏
  • 举报
回复
引用 2 楼 l965820927 的回复:
把32行改成ftpClient.storeFile(files.get(key).getname(), fis)试试
key就是文件名和files.get(key).getname()是一样的
l965820927 2014-11-14
  • 打赏
  • 举报
回复
把32行改成ftpClient.storeFile(files.get(key).getname(), fis)试试
l965820927 2014-11-14
  • 打赏
  • 举报
回复
ftpClient.storeFile(key, fis)里的key是什么,文件名?

50,541

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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