初次接触FTPclient

参与了一个基于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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值