zoukankan      html  css  js  c++  java
  • JavaWeb文件下载

    针对JavaWeb文件上传在http://www.runoob.com/servlet/servlet-file-uploading.html上面已经很详细说明的,

    但是该网站没有说明文件下载。对于一般的文件直接用a标签的话,如下代码所示。由于浏览器可以解析jpg和txt文件

    ,故不会直接下载而是在其他网页打开:

    <a href="/IT/download/1.gif">下载图片</a>
    <a href="/IT/download/day10.doc">下载文档</a>
    <a href="/IT/download/day10.txt">下载笔记</a>

    如果想要完成直接下载的目的,可以通过Servlet进行操作,做了一个简单的html页面

    <a href="/IT/download?name=1.gif">下载图片1</a>
    <a href="/IT/download?name=day10.doc">下载文档1</a>
    <a href="/IT/download?name=day10.txt">下载笔记1</a>
    

    我为download注册了一个servlet,xml描写如下:

      <servlet>
        <servlet-name>DownloadServlet</servlet-name>
        <servlet-class>com.response.download.DownloadServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>DownloadServlet</servlet-name>
        <url-pattern>/download</url-pattern>
      </servlet-mapping>

    由于我的请求方式是get方式,所以只需在DownloadServlet这个类中重写doGet方法,代码实现如下

    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            //获取文件名
            String filename=request.getParameter("name");
            //防止读取name名乱码
            filename=new String(filename.getBytes("iso-8859-1"),"utf-8");
            //在控制台打印文件名
            System.out.println("文件名:"+filename);
            
             //设置文件MIME类型  
            response.setContentType(getServletContext().getMimeType(filename));  
            //设置Content-Disposition  
            response.setHeader("Content-Disposition", "attachment;filename="+filename);
            
            //获取要下载的文件绝对路径,我的文件都放到WebRoot/download目录下
            ServletContext context=this.getServletContext();
            String fullFileName=context.getRealPath("/download/"+filename);
            
            //输入流为项目文件,输出流指向浏览器
            InputStream is=new FileInputStream(fullFileName);
            ServletOutputStream os =response.getOutputStream();
            
            /*
             * 设置缓冲区
             * is.read(b)当文件读完时返回-1
             */
            int len=-1;
            byte[] b=new byte[1024];
            while((len=is.read(b))!=-1){
                os.write(b,0,len);
            }
            //关闭流
            is.close();
            os.close();
            
        }
  • 相关阅读:
    理清一下JavaScript面向对象思路
    IE的CSS渲染跟其它浏览器有什么不同
    页面元素的CSS渲染优先级
    push与createElement性能比较
    关于JavaScript的push()函数
    关于JavaScript的沙箱模式
    JavaScript SandBox沙箱设计模式
    用live()方法给新增节点绑定事件
    深入JavaScript对象创建的细节
    Keras class_weight和sample_weight用法
  • 原文地址:https://www.cnblogs.com/bufferflies/p/6654875.html
Copyright © 2011-2022 走看看