2 emrocky emrocky 于 2016.03.11 21:20 提问

FTPclient 上传文件不完整

问题表现:本地zip包上传到FTP后压缩包中只有一个0KB的文件,整个ZIP包只占10B好像(大小记不清了,反正只有一个文件名,里面内容是空的,以记事本打开的话能看到一个问号)
问题详情:
项目中是有一个单独的FTP上传类的,上传的方法是这样的:

public >
...

public boolean upload(String ftppath,String localfilepath){

...

//前面的代码已经将工作目录设置好了

FileInputStream inputStream=new FileInputStream(localfilepath);

ftpClient.storeFile(filenam,localfilepath);

...

}

...

}

public static void main(String[]args){

myftpclient client=new myftpclient();

...//设置连接参数

client.upload("/export/abcd.csv.zip","D:/localtmp/export/abcd.csv.zip");

...

}

大体上的代码就是这样.

执行main函数时,文件是能完整的上传到ftp的.

在另一个类(跨包)中通过spring AutoWire(连接参数已在context中配置)注入之后,调用upload方法就会只上传一个10B大小的包含一个空文件的ZIP包.文件名和路径都是正确创建,就是文件没有内容.

我加过断点调试,传递的参数与main方法中是一致的,FTP socket的连接参数除了本地端口一直在变之外.其他都是一致的.

main方法执行结果正常,说明上传方法是没问题的.

文件成功在服务器创建,说明Spring注入的连接参数也是没问题的(吧?)

可是为什么main就能完整的上传文件,跨包类(一个在util包下,一个在service包下,)上传就是空文件,问题在哪呢?

stackoverflow上有个问题很相似,Apache Commons Ftp file uploaded 0 bytes

但他是0字节,我是10字节...而且我也试过答案中的加上和去掉ftpsClient.enterLocalPassiveMode();但是不顶用..

求大神帮忙分析看看出错原因可能在哪,折腾我一个下午了.

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.12 09:22
已采纳

检查下带你的异常分支,看看有没有异常信息。

emrocky
emrocky 原因是本地文件被其他写入线程占用,导致读不到数据。
2 年多之前 回复
emrocky
emrocky 有异常就好办了…就是没有任何异常,storefile返回也是true…
2 年多之前 回复
wangkang80
wangkang80   2016.03.14 10:40

关于ftp操作,可参考项目:http://git.oschina.net/wangkang/llsfw

内有ftp操作的封装源代码,

希望能够帮到你.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
解决FTPClient上传文件时文件被破坏问题
用Apache的FTPClient上传文件时发现一个问题,就是上传txt文件没问题,但上传zip文件时文件会被破坏,查了一下原因,原来是这样:因为RFC 959中规定了缺省的传输模式应该是ASCII的,org.apache.commons.net.ftp.FTPClient实现也遵守此标准。所以org.apache.commons.net.ftp.FTPClient在缺省情况下是按ASCII形
java实现FTP上传下载:FTPClient类进行FTP上传下载大文件(包含导致假死现象)
1.首先,程序中设置ftp请求方式为被动模式,即程序去请求ftp服务器,要求服务器来打开一个端口,让客户端传输文件。这是基本的,但是无法避免上传阻塞问题。 2.其次,设置连接超时,数据传输超时等等,也无法避免阻塞。 3.接着,调用上传或下载后,调用stream.close()方法,同样无法避免阻塞,这是基本的操作,说明不了什么。 4.最后,我在程序中加入了上传下载listener(ftpcl
解决FTPClient linux 下载文件小于实际文件,线程挂起等问题
FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题解决 实际是因为FTP的两种传输模式:主动模式和被动模式的不同而导致的 FTPClient.listFiles()或者FTPClient.retrieveFile()方法时,就停止在那里,什么反应都没有,出现假死状态。google一把,发现很多人也出现了此类问题,最终在一个帖子
Java_FTPClient实现文件上传下载
from: http://www.open-open.com/lib/view/open1333860679171.html     所用到的jar包有:   commons-net-1.4.1.jar   jakarta-oro.jar     一、上传文件 01 文件上传源代码  02             /**   0
Apache FTPClient 实现文件上传
package FTP; /** * Created by IntelliJ IDEA. * User: haoshihai * Date: 13-7-3 * Time: 下午4:45 * To change this template use File | Settings | File Templates. */ import java.io.File; import java.i
Debug记录 - taotao项目 - FTPClient对象 storeFile方法 很慢 上传文件大小为 0
使用FTPClient做FTP上传,由quartz来定时运行(2分钟一次),之前在生产环境调试没问题,一些时间后现场反馈不能上传了,当出现10个扫描文件的日志后就不再出现了(扫描文件日志为每次运行任务前先扫描指定目录并输出需要上传的文件件数 ),后来发现因为quartz在这种配置下,默认同任务线程池最多只启动10个线程,由此可见是因为之前的任务并没有运行结束,按照正常,这个任务完全可以在1,2秒内
Apache FTPClient上传文件时的问题及解决
用Apache的FTPClient上传文件时发现一个问题,就是上传txt文件没问题,但上传zip文件时文件会被破坏,查了一下原因,原来是这样: 因为RFC959中规定了缺省的传输模式应该是ASCII的,org.apache.commons.net.ftp.FTPClient实现
JAVA中使用FTPClient实现文件上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在 commons-net包中)实现上传下载文件。 一、上传文件          原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul
nginx+tomcat使用apache的FtpClient上传图片时由于多线程问题导致的文件大小为0的问题
最近遇到这样一个问题:通过nginx反向代理上传图片时,发现上传之后的文件大小为0,并且nginx出现504错误,也就是说上传图片失败,但有时又不为0,,也就是说可以正常上传图片,直接通过ssh客户端工具上传图片也是没问题的。 nginx出现504网关超时错误是因为上游upstream服务器tomcat请求时响应时间过长,nginx迟迟无法收到tomcat的返回,于是出现超时错误,为什么会出现这
用FTPClient上传文件,执行this.ftpClient.storeFile(fileName, inStream)报错
this.ftpClient.storeFile(fileName, inStream) 方法执行时无反应,最后提示错误         原因:代码中加了多了一个设置   this.ftpClient.enterLocalPassiveMode();   //将传输模式设置成被动,这种情况如果服务器没有做特殊设置的话是正常的,现在去掉这个设置,就可以正常上传文件了。    具体采用什么样的