A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Crist 中级黑马   /  2013-12-20 16:53  /  858 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima.servlet;

  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;

  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. //实现文件的下载
  11. public class ServletContextDemo6Servlet extends HttpServlet {

  12.         public void doGet(HttpServletRequest request, HttpServletResponse response)
  13.                         throws ServletException, IOException {
  14.                 //得到输入流:路径该怎么获取
  15.                 String path = "/WEB-INF/2.jpg";// 斜线就代表当前应用
  16.                
  17.                 //告知客户端以下载的方式打开
  18.                 //这个setHeader()  方法里面具体应该写什么
  19.                 response.setHeader("Content-Disposition", "attachment;filename=2.jpg");
  20.                 response.setHeader("Content-Type", "application/octet-stream");
  21.                
  22.                 String realPath = getServletContext().getRealPath(path);//根据相对于当前应用的路径,得到绝对路径
  23.                 System.out.println(realPath);
  24.                 InputStream in = new FileInputStream(realPath);
  25.                 OutputStream out = response.getOutputStream();
  26.                
  27.                 int len = -1;
  28.                 byte b[] = new byte[1024];
  29.                 while((len=in.read(b))!=-1){
  30.                         out.write(b, 0, len);
  31.                 }
  32.                 in.close();
  33.                 out.close();
  34.                
  35.         }

  36.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  37.                         throws ServletException, IOException {

  38.                 doGet(request, response);
  39.         }

  40. }
复制代码


//这个setHeader()  方法里面具体应该写什么
                response.setHeader("Content-Disposition", "attachment;filename=2.jpg");
                response.setHeader("Content-Type", "application/octet-stream");

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 25343215 于 2013-12-20 17:03 编辑

楼主少设置了 response.setContentType(getServletContext().getMimeType(filename));// 设置MIME类型

下面是一份可用的代码

在WebRoot里面创建目录response/demo6/,在这里放入文件。
然后通过动态访问的方法: ?文件名.格式  的方法连接。
  1. package cn.itcast.servlet.response.demo6;

  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;

  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;

  10. /**
  11. * 实现文件下载
  12. *
  13. * @author seawind
  14. *
  15. */
  16. public class ResponseServlet6 extends HttpServlet {

  17.         public void doGet(HttpServletRequest request, HttpServletResponse response)
  18.                         throws ServletException, IOException {
  19.                 // 获得文件名
  20.                 String filename = request.getParameter("filename");
  21.                 System.out.println(filename);

  22.                 response.setContentType(getServletContext().getMimeType(filename));// 设置MIME类型
  23.                 // tomcat/conf/web.xml
  24.                 response.setHeader("Content-Disposition", "attachment;filename="
  25.                                 + filename);

  26.                 // 下载 读取目标文件,通过response 将目标文件内容写到客户端
  27.                 // 绝对磁盘路径 读取文件
  28.                 String fullFilename = getServletContext().getRealPath(
  29.                                 "/response/demo6/" + filename);
  30.                 InputStream in = new FileInputStream(fullFilename);
  31.                 OutputStream out = response.getOutputStream();
  32.                 int b;
  33.                 while ((b = in.read()) != -1) {
  34.                         out.write(b);
  35.                 }
  36.                 in.close();
  37.                 out.close();
  38.         }

  39.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  40.                         throws ServletException, IOException {
  41.                 doGet(request, response);
  42.         }

  43. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
{:soso_e129:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马