java两种常用文件下载实例
来源:互联网 发布:java 编码规范 编辑:程序博客网 时间:2024/06/10 17:47
方式一:超链接下载
如果文件格式浏览器识别,将直接打开文件,显示在浏览器上,这是可以右键另存下载。如果文件格式浏览器不识别,将弹出下载窗口。方式二:在服务器端编程完成下载。
超链接下载方式实例:
<a href=”某个资源连接”>名字</a>在服务器端编程完成下载实例:
public void doPost(HttpServletRequset request, HttpServletResponse response) throws ServletException,IOException{ //1.得到要下载的文件名称。 String filename = request.getParameter("filename"); //解决中文乱码问题。因为tomcat的默认的编码为ISO8859-1。转成UTF-8编码。 filename = new String(filename.getBytes["iso8859-1"],"UTF-8"); //2.在对应的目录下查找文件是否存在。 File file = new File("某个目录"+"/"+filename); if(file.exists()){ //3.文件存在,进行对应操作。 //获取并设置下载文件的mimeType String mimeType = this.getServletContext().getMimeType(filename); response.setContentType(mimeType); //因为不同浏览器下载时文件名字的编码不一样,所以要判断然后对应选择。 String agent = request.getHeader("user-agent"); if(agent.contains("MSIE")) //如果是IE浏览器 filename = URLEncoder.encode(filename,"UTF-8"); else if(agent.contains("Firefox")){ //如果是火狐浏览器。 BASE64Encoder base64 = new BASE64Encoder(); filename="=?utf-8?B?"+base64.encode(filename.getBytes("UTF-8"))+"?="; }else //其他的浏览器。 filename = URLEncoder.encode(filename,"UTF-8"); //不管浏览器是否能解析,都进行下载处理。 response.setHeader("content-Disposition","attachement;filename="+filename); //读取要下载的文件内容 FileInputStream fis = new FileInputStream(file); //将要下载的文件内容通过流回写到客户端 OutputStream os = new response.getOutputStream(); int len = -1; byte[] b = new byte[1024*1024]; while((fis.read(b))!=-1){ os.write(b,0,len); os.flush(); } //关闭资源。 os.close(); fis.close(); }else{ //抛出运行异常。 throw new RuntimeException("下载资源不存在!!!"); }}
5 . 服务器端编程下载步骤:
<1>.下载的文件要通过response.getOutputStream()流,回写到客户端。
<2>.设置mimeType
<3>.设置响应头,不管浏览器是否能解析,都下载。
6.文件下载中出现乱码的问题:
<1>.关于下载时中文名称资源找不到的问题。
原因:超链接下载是get方式请求服务器。在服务器端中,
String filename = request.getParameter(“filename”);
解决方案:filename = new String(filename.getBytes(“iso5589-1”),”UTF-8”);
<2>.下载文件时,显示中文乱码问题。
原因: response.setHeader(“content-Disposition”,”attachement;filename=”+filename)中filename这个字符串会根据不同浏览器进行不同的编码,所以会显示乱码。
解决方法:因为filename在判断文件是否存在的时候,会用到,所以在判断存在之后,要根据不同浏览器对filename进行不同的编码。 if(agent.contains("MSIE"))
//如果浏览器是IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
else if(agent.contains("Firefox")){
//如果是火狐浏览器
BASE64Encoder base64 = new BASE64Encoder();
filename = "=?utf-8?B?"+base64.encode(filename.getBytes("UTF-8"))+"?=";
}else
filename = URLEncoder.encode(filename, "UTF-8");
- java两种常用文件下载实例
- java 文件下载实例
- 使用groovy和java两种方式下载文件文件
- [Java]文件下载实例方法
- java实现文件下载的两种方式
- java实现文件下载的两种方式
- Servlet文件下载的常用实例1
- 两种方式文件下载
- java两种实例化
- java web servlet 文件下载实例代码
- 文件下载的两种方式
- Spring MVC - 两种文件下载方式
- python下载文件的两种方法
- 文件下载的两种方式
- angualr2 下载文件的两种方式
- JAVA开发常用功能二--文件下载
- java浏览器文件下载实例(附源码下载地址)
- JAVA EE项目常用之 struts1.2 文件上传的两种方法
- 18---进程管理
- 模板类中定义list<T>::iterator iter在g++下不识别的解决办法
- dataTables错误:DataTables warning : Requested unknown parameter '1' from the data source for row 0
- Android-LIstview-列表控件的简单实现ArrayAdapter
- Hadoop基础教程-第1章 环境安装配置(1.6 SSH免密登录)
- java两种常用文件下载实例
- POJ 1037 A decorative fence 笔记
- python学习(3)python基础、使用list和tuple
- PHP 二维数组根据某个字段排序
- Sass初涉
- 将Java程序安装为系统服务之windows
- 1
- mysql增删查改
- Java并发编程学习笔记(一)