栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

文件的下载

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件的下载

  • 超链接的文件下载:



    
    图片的下载


超链接的文件下载

下载文件01
下载文件02

超链接文件下载,下载的图片默认是在浏览器显示。

http://localhost:8080/imags/01.jpg

该请求地址是一个资源,是无法处理请求的,为什么下载的图片会在浏览器显示呢?
在Tomcat的conf目录下的web.xml文件中配置了DefaultServlet会在服务器启动的时候自动创建。如果请求资源没有对应的servlet,服务器就会根据默认的DefaultServlet来进行处理。

 
        default
        org.apache.catalina.servlets.DefaultServlet
        
            debug
            0
        
        
            listings
            false
        
        1
    

        default
        /
    

    
    
        jsp
        *.jsp
        *.jspx
    

DefaultServlet会使用字节输入流读取文件(image/…)生成对应的输入流对象,然后使用字节输出流将输入流的字节流数据写到浏览器。

  • 自定义servlet实现文件的下载

自定义servlet文件下载

下载文件01
下载文件02
@WebServlet("/download")
public class downServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String filename = req.getParameter("filename");
        String mimeType = getServletContext().getMimeType(filename);
        System.out.println("文件下载的类型"+mimeType);
        resp.setHeader("Content-Type",mimeType);

        //解决中文乱码
        String encode = URLEncoder.encode(filename, "UTF-8");
        //设置响应头告诉浏览器下载文件而不是显示文件
        resp.setHeader("Content-Disposition","attachment;filename="+encode);


        String file ="imags/"+filename;
        InputStream resourceAsStream = getServletContext().getResourceAsStream(file);
        ServletOutputStream outputStream = resp.getOutputStream();
        byte[] bytes = new byte[1024];
        int length=0;
        while((length=resourceAsStream.read(bytes))!=-1){
            outputStream.write(bytes,0,length);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

  • 使用框架common-io的实现
    首先需要下载依赖。

      commons-io
      commons-io
      2.5

在我们没有使用框架的时候:

 byte[] bytes = new byte[1024];
        int length=0;
        while((length=resourceAsStream.read(bytes))!=-1){
            outputStream.write(bytes,0,length);

在我们使用了框架后只需要写:

IOUtils(inputStream,outputStream);

大大简化了我们的代码。

在我们后续的学习阶段要转变思想:有现成的框架尽量使用现成的框架,现阶段不要重复发明轮子,而是熟练的掌握一些开源框架的使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号