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 原因是本地文件被其他写入线程占用,导致读不到数据。
一年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!