导读:在做项目的过程中,当用户发起申诉时,要上传一个申诉材料。然后后台运营人员在处理申诉时,可能会需要下载申诉材料,进行参考。本篇博客呢,就介绍一下文件的下载!
一、代码实现
<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去限制文件的大小,但是浏览器不兼容,没能成功!
创新和模仿,是一个很难平衡和掌握的选择!