下载文件

1、直接把服务器上的资源文件地址写到a标签中,点击会自动下载文件

<a href="http://www.Yuriki.com/download/demo.doc">下载demo文件</a>

2、请求到后端,后端组织数据再返回

前端链接的设置

<a href="down?filename=demo1.docx">经过后端下载文件</a>

servlet的doGet方法

    //获取文件名	
    String filename = request.getParameter("filename");

    //指定文件下载的目录F:/word/img/download
    File file=new File("F:/work/img/download/"+filename);
    //根据文件名去服务器目录中查找
    if(!file.exists()){//文件不存在
        throw new IOException("资源不存在");
    }else{
        //设置文件类型开始下载
        String mimeType = getServletContext().getMimeType(filename);//媒体类型
        response.setContentType(mimeType);//响应时通过媒体类型响应

        //设置Content-Disposition,MIME协议的扩展,提供默认文件名,在浏览器上弹出文件下载对话框
        //默认在浏览器设置的下载位置
        //attachment为以附件方式下载:意味着消息体应该被下载到本地;filename设置的就是默认文件名
        response.setHeader("Content-Disposition","attachment;filename="+filename);

        //使用流类进行写入操作
        InputStream in=new FileInputStream(file);
        //调用响应时的输入流
        OutputStream out=response.getOutputStream();

        /*int b;
                while((b=in.read())!=-1){//这样大文件的下载效率会很慢
                    out.write(b);
                    out.flush();
                }*/
        byte[] b=new byte[1024];
        int len=0;
        while ((len=in.read(b))!=-1){
            out.write(b,0,len);
            out.flush();
        }
        in.close();
        out.close();
    }
posted @ 2021-07-29 10:16  Yuriki  阅读(133)  评论(0)    收藏  举报