Java Web基础之文件下载
来源:互联网 发布:淘宝客微博推广教程 编辑:程序博客网 时间:2024/05/22 14:03
文件下载第一种方式--超链接下载
在jsp页面上有三个<a>标签
<a>标签中href的路径直接就是服务器中文件的路径,这些文件都是在day10项目中的download目录下
<a href="/day10/download/1.gif">1.gif</a><br/><a href="/day10/download/day10.txt">day10.txt</a><br/><a href="/day10/download/day10.doc">day10.doc</a><br/>
点击<a>标签,浏览器就会解析,能解析的他就会默认打开,不能解析的就会弹出下载,就能把文件下载过来
文件下载第二种方式--编码下载
同样在jsp页面上有这三个<a>标签
但这三个<a>标签的href发生了变化,在路径后面加了个name参数
<a href="/day10/download?name=1.gif">1.gif</a><br/><a href="/day10/download?name=day10笔记.txt">day10笔记.txt</a><br/><a href="/day10/download?name=day10.doc">day10.doc</a><br/>
然后在download这个servlet类中获取参数以及设置两个头一个流
import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils;import com.itheima.utils.DownLoadUtils;/** * 文件下载 */public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取下载文件的名称String filename = request.getParameter("name");//注意中文乱码filename=new String(filename.getBytes("iso8859-1"),"utf-8");ServletContext context = this.getServletContext();//文件下载//1.设置文件的mimeTypeString mimeType = context.getMimeType(filename);response.setContentType(mimeType);//2.设置下载的头信息String _filename=DownLoadUtils.getName(request.getHeader("user-agent"), filename);response.setHeader("content-disposition", "attachment;filename="+_filename);//获取输入流InputStream is = context.getResourceAsStream("/download/"+filename);//获取输出流ServletOutputStream os = response.getOutputStream();int len=-1;byte[] b=new byte[1024];while((len=is.read(b))!=-1){os.write(b, 0, len);}os.close();is.close();}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
文件名字乱码问题使用的工具类
import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import sun.misc.BASE64Encoder;public class DownLoadUtils {public static String getName(String agent, String filename) throws UnsupportedEncodingException {if (agent.contains("MSIE")) {// IE浏览器filename = URLEncoder.encode(filename, "utf-8");filename = filename.replace("+", " ");} else if (agent.contains("Firefox")) {// 火狐浏览器BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";} else {// 其它浏览器filename = URLEncoder.encode(filename, "utf-8");}return filename;}}
阅读全文
0 0
- Java Web基础之文件下载
- Java Web 文件下载之断点续传
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- Java Web 之文件上传与下载
- Java Web基础之文件上传
- Java web 文件下载
- Java web----文件下载
- Java WEB 文件下载
- java web文件下载
- Java Web文件下载
- java web 文件下载
- java web-文件下载
- java web-文件下载
- Java Web文件下载
- java web 下载文件
- android编程实现按钮事件
- 第一章总结
- laravel5.4用163邮箱发送邮件给qq邮箱遇到的问题
- Java多线程操作案例-生产者和消费者实现
- 关于&& || ! 遇到的一个问题
- Java Web基础之文件下载
- JSON basics
- Git使用:代码提交、同步,创建分支等
- POJ 2033 Alphacode 笔记
- Git之工作区和暂存区
- [LeetCode] Repeated DNA Sequences
- Java 8 函数式编程
- java的跨平台原理
- Compare Version Numbers字符串的应用+小技巧