weixin_42347387 2009-09-12 14:36
浏览 240
已采纳

Servlet下载文件

public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception{
File pathsavefile = new File(Download.class.getResource("/").getFile() + "../1.xls");
String fileName="data.xls";//保存窗口中显示的文件名

    response.reset(); 
    response.setContentType("APPLICATION/OCTET-STREAM"); 
    fileName=response.encodeURL(new String(fileName.getBytes(),"UTF-8"));//转码 
    response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+"\""); 
    ServletOutputStream out = response.getOutputStream();
    InputStream inStream=new FileInputStream(pathsavefile); 
    byte[] b = new byte[1024];
    int len;
    while((len=inStream.read(b)) >0)
        out.write(b,0,len); 
    response.setStatus( response.SC_OK ); 
    response.flushBuffer(); 
    out.close(); 
    inStream.close();
}

各位高手谁能帮我把这段代码加个注释!本人新手想写一个下载文件但是不懂这段代码的意思!各位帮个忙!

外加一句!我的这个文件是放在WEB-INF下的.xls文件(不知道有没有什么影响)帮我写一个

  • 写回答

3条回答 默认 最新

  • mafangling 2009-09-13 03:31
    关注

    [code="java"]
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception{
    /*下边这一行代码的意思, 构造一个文件对象, 在web程序里 一个Java类文 件.class.getResource() 将得到 tomcat 的安装目录\webapps\ 你的项目名\WEB-INF\classes\的路径 。 在加上../1.xls 的意思是在tomcat 的安装目录\webapps\ 你的项目名\WEB-INF\下的1.xls 。
    (桌面程序里有区别因为包含 package的路径。)
    这个文件必须存在, 而且这个文件是作为输入流的读取源的。

    */

    File pathsavefile = new File(Download.class.getResource("/").getFile() + "../1.xls");
    /*保存窗口中显示的文件名 , 这是 将在浏览器输入 http://localhost:8080/你的项目名/你的那个servlet 的URL映射,将显示下载的文件名称。 同时它是作为输出流的目的源。
    String fileName="data.xls";
    //重新设置相应。
    response.reset();
    //设置内容文件的类型 一般有pdf , word execl 各有不同的设置。
    response.setContentType("APPLICATION/OCTET-STREAM");
    fileName=response.encodeURL(new String(fileName.getBytes(),"UTF-8"));//转码
    //以附件的形式提示用户下载, 就是你在浏览器打开那个servlet 时将弹出对话框提//示你下载还是保存。
    response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+"\"");
    //得到响应的输出流 即向客户端输出信息的输出流。
    ServletOutputStream out = response.getOutputStream();
    InputStream inStream=new FileInputStream(pathsavefile);
    byte[] b = new byte[1024];
    int len;
    while((len=inStream.read(b)) >0)
    out.write(b,0,len);
    response.setStatus( response.SC_OK );
    response.flushBuffer();
    out.close();
    inStream.close();
    }
    [/code]
    其实你可以建工程试一试。 一切就明了的很。
    我建了工程测试没问题。这里不能传附件 我上传到我的blog里, 你可以下下来运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)