在创建一个文件夹, 名称 download, 先拷入要下载的一些文件
编写下载的页面, 提供一些下载的超链接, 点击超链接, 弹出下载的窗口
编写下载的 Servlet 类, 完成下载
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 先获取到文件的名称
- String filename = request.getParameter("filename");
- // 解决中文乱码
- filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
- // System.out.println("要下载的文件名称:"+filename);
- // 设置两个头一个流
- // 设置第一个头, 值可以是 MIME 类型, 可以获取该文件的 MIME 类型
- String type = this.getServletContext().getMimeType(filename);
- response.setHeader("content-type",type);
- // 先获取到用户使用的浏览器的信息, 根据浏览器的信息采用不同的编码, 例如火狐, 采用 Base64 编码, 使用 IE 采用的 URL 编码
- // 先判断浏览器的信息
- String agent = request.getHeader("user-agent");
- // Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
- // System.out.println(agent);
- String name = null;
- if(agent.contains("Firefox")){
- // 使用是火狐, 采用 Base64 编码
- name = base64EncodeFileName(filename);
- }else{
- // 使用的是 IE 或者谷歌, 使用 URL 编码
- name = URLEncoder.encode(filename, "UTF-8");
- }
- System.out.println("编码后的内容:"+name);
- // 设置第二个头
- response.setHeader("content-disposition", "attachment;filename="+name);
- // 一个流, 先获取到要下载的文件的输入流, 使用 response 对象的输出流输出到客户端上, 完成文件下载了
- // 先获取到要下载的文件的输入流, 先获取到 download 文件夹 + filename 文件, 获取文件的输入流了
- String path = this.getServletContext().getRealPath("/download");
- // System.out.println(path);
- // 获取文件的输入流
- InputStream in = new FileInputStream(path+"/"+filename);
- // 获取输出流, 不能 new, 使用 response 对象
- OutputStream os = response.getOutputStream();
- byte [] b = new byte[1024];
- int len = 0;
- while((len = in.read(b)) != -1){
- os.write(b, 0, len);
- }
- in.close();
- os.close();
- }
- /**
- * 传入文件的名称, 进行 Base64 编码
- * @param fileName
- * @return
- */
- public String base64EncodeFileName(String fileName) {
- BASE64Encoder base64Encoder = new BASE64Encoder();
- try {
- return "=?UTF-8?B?"
- + new String(base64Encoder.encode(fileName
- .getBytes("UTF-8"))) + "?=";
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
- }
文件下载
来源: http://www.bubuko.com/infodetail-2517077.html