导读:在做项目的过程中,当用户发起申诉时,要上传一个申诉材料。然后后台运营人员在处理申诉时,可能会需要下载申诉材料,进行参考。本篇博客呢,就介绍一下文件的下载!

一、代码实现

<span style="font-family:KaiTi_GB2312;font-size:18px;">public void DownLoadAppealStuff() throws IOException{

		String path=getPara("path");

		FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null; try {
ftpClient.connect("服务器地址名称");
ftpClient.login("服务器用户名", "登录密码"); String remoteFileName = path;
FileSystemView fsv = FileSystemView.getFileSystemView(); //截取文件名
String fileName = path.substring(path.lastIndexOf("/")+1);
//读取桌面路径
fos = new FileOutputStream(fsv.getHomeDirectory()+"/"+fileName); //System.out.println(fsv.getHomeDirectory()+"/"+fileName); ftpClient.setBufferSize(1024);
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(remoteFileName, fos);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
} flag=true; renderJson(flag); }</span>

注意:在这个方法中,用到了一个IOUtils工具类,这个在网上下载就行。刚开始是自己写代码实现,后来发现已经有别人写好的了,就引入了一个jar包,轻松实现了远程文件的下载。

二、其中的一些细节处理

2.1,获取文件的后缀

<span style="font-family:KaiTi_GB2312;font-size:18px;">String strStuffType=fileName.substring(fileName.lastIndexOf(".")+1);</span>

2.2,获取桌面路径

<span style="font-family:KaiTi_GB2312;font-size:18px;">FileSystemView fsv = FileSystemView.getFileSystemView();
String deskPath=fsv.getHomeDirectory().toString()</span>

2.3,判断文件大小

<span style="font-family:KaiTi_GB2312;font-size:18px;">FileInputStream input = new FileInputStream(imagefile);
//限制文件大小:50M
FileChannel fc=null;
fc=input.getChannel();
System.out.println(fc.size());
if(fc.size()>52428800){//文件大小不符合,不进行上传
//jacksonJsonUntil.beanToJson(response, "false");
System.out.println("文件大小超出50M限制!");
}</span>

三、总结

以上就是最简单的基础文件下载实现,在实现的过程中,还有一些地方需要优化:比如批量上传、下载;断点续传、续载;自定义文件保存路径等。不过路是一步一步走的,先实现简单的功能,再去做优化!本来最开始是在前台使用JS去限制文件的大小,但是浏览器不兼容,没能成功!

创新和模仿,是一个很难平衡和掌握的选择!

【Nginx 3】FTP远程文件下载的更多相关文章

  1. nginx+memcached+ftp上传图片+iis

    nginx+memcached+ftp上传图片+iis 自毕业以来,一直在现在公司做订餐系统的开发,那会儿没有口碑,没有饿了么,更别说美团外卖,百度外卖了...因为规模都比较小,都是一个服务器包含数据 ...

  2. Linux常用命令2(远程文件下载+查看文件内容)

    一.远程文件下载的两种方法:ftp命令 + scp命令 ftp命令: 服务器若安装了ftp Server,另外一台Linux可以使用ftp的client程序来进行文件的远程拷贝读取下载和写入上载. 1 ...

  3. linux命令行下的ftp 多文件下载和目录下载

    安装:yum install ftp 使用:ftp + ip (未进入ftp状态下运行) ----------------------------------------- 目标ftp服务器是一个非标 ...

  4. (转)linux命令行下的ftp 多文件下载和目录下载

    link:http://yahoon.blog.51cto.com/13184/200991 目标ftp服务器是一个非标准端口的ftp   1.通过shell登录 #ftp    //shell下输入 ...

  5. <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  6. linux命令行下的ftp 多文件下载和目录下载(转)

    目标ftp服务器是一个非标准端口的ftp   1.通过shell登录 #ftp    //shell下输入ftp命令,进入到ftp提示符 >open IP  PORT   //IP ,PORT对 ...

  7. windows下nginx代理ftp服务器

    我所在的开发环境里,nginx和ftp在同一台服务器. ftp根目录: nginx的配置: 在nginx.conf中加入: server { listen ; server_name localhos ...

  8. Nginx与ftp服务器

    使用Nginx搭建ftp服务器

  9. 【原】Nginx搭建FTP服务器的细节问题

    关于文件服务器很多实现方法,比如采用阿里的分布式文件系统FastDFS,以及自己内部搭建FTP服务器,这里记录一下关于nginx搭建FTP文件系统流程. ftp服务器搭建的步骤网上也是很多,这里贴一下 ...

随机推荐

  1. ASP.NET MVC之从控制器传递数据到视图四种方式

    前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...

  2. memwatch

    一.简介 memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free).错误释放(erroneous free).没有释放的内存(unfreed memory).溢出(Ov ...

  3. HtmlParser + HttpClient 实现爬虫

    简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地:HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向 ...

  4. CF 500 B. New Year Permutation 并查集

    User ainta has a permutation p1, p2, ..., pn. As the New Year is coming, he wants to make his permut ...

  5. 转-Android微信支付

    http://blog.fangjie.info/android微信支付/ Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“ ...

  6. 帝国CMS商城功能高级使用

    一.常见问题1.为什么自定义模型加入购物车提示“非商城表的信息”?答:模型要使用商城的功能,要先到:后台>商城>商城参数设置:“指定使用商肠能的数据表”勾选你这个自定义模型表,才可以使用. ...

  7. (Delphi) Windows 32 API程序设计目录

    这里所有程序均使用Delphi调用Windows 32 API方式实现,并不是使用VCL已经封装好的类实现的! (一)第一个窗口程序 01 创建第一个窗口.

  8. MySql中增加一列

    如果想在一个已经建好的表中添加一列,可以用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null; 这条语 ...

  9. sql自动生成汉语拼音和首字母函数

    1.Sql server自动生成拼音的函数 /* 根据汉字获取全拼 1.生成所有读音临时表 2.根据Chinese_PRC_CS_AS_KS_WS 排序获取读音 */ )) ) as begin ) ...

  10. 如何让你的Python代码更加pythonic ?

    pythonic如果翻译成中文的话就是很python.很+名词结构的用法在中国不少. 以下为了简略,我们用P表示pythonic的写法,NP表示non-pythonic的写法,当然此P-NP非彼P-N ...