初次接触FTPclient

来源:互联网 发布:python list生成字典 编辑:程序博客网 时间:2024/05/18 01:50

参与了一个基于Spring MVC框架的网站开发,其他带过,其中有个模块涉及到文件的上传功能,使用了js 的uploadfiy插件,上传时还会有百分比的进度条,后台使用FileOutputStream的write方法,在此碰到了个问题,上传文件大小总有限制,最开始仅能上传100M以下的文件。

网上搜索出很多建议:改spring的配置文件

<property name="maxUploadSize"><value>999999999999</value></property>

改uploadfiy的参数sizeLimit (上传文件的大小限制)。

这两个都更改了后,效果还是不大,有时候是上传的进度条到百分之几时就会中断,然后报IO error错误,有时候是进度条跑完后,后台程序报异常。

还有建议是改网站服务器的配置,改tomcat配置。(不知道有用没)

感觉上传的controller应该要换一种方式试试,于是看到了FTPCLient,貌似这个上传文件比HTTP协议稳定,而且还支持断点续传(不会用),都不知怎么开始用,感觉莫名其妙,于是各种找demo,终于找到一个能用的:

<span style="white-space:pre"></span>FTPClient ftpClient = new FTPClient();         FileInputStream fis = null;         try {             ftpClient.connect("192.168.14.117");             ftpClient.login("admin", "123");             File srcFile = new File("C:\\new.gif");             fis = new FileInputStream(srcFile);             //设置上传目录             ftpClient.changeWorkingDirectory("/admin/pic");             ftpClient.setBufferSize(1024);             ftpClient.setControlEncoding("GBK");             //设置文件类型(二进制)             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);             ftpClient.storeFile("3.gif", fis);         } catch (IOException e) {             e.printStackTrace();             throw new RuntimeException("FTP客户端出错!", e);         } finally {             IOUtils.closeQuietly(fis);             try {                 ftpClient.disconnect();             } catch (IOException e) {                 e.printStackTrace();                 throw new RuntimeException("关闭FTP连接发生异常!", e);             }         } 
(代码来源于网络)
当ftpClient.storeFile 方法返回ture时,就说明上传成功了,此时注意要添加jar包,我用的是commons-net-3.3.jar,项目导入此包后,还要将这个包复制一份到tomcat的lib目录下,否则会找不到这个类,做完这个后,却还是返回了false,又在网上看到

调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。

于是我加入了这个方法,果然就ok了,改动之后,上传的文件大小能到四五百兆。

总结:方法是找到了,但是还是知其然不知其所以然,惭愧啊,都不知道原因到底在哪,唉,再一个就是,如果上传再大些的文件,uploadfiy的进度条到不了5%就断掉了,然后还是报IO error,觉得还是这个js插件没弄好。第一次写哈,请多包涵嘿嘿,记录下这个过程以便复习,这其中还有好多没弄明白的缘由,希望大神们多多赐教。

0 0
原创粉丝点击