栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet之文件下载

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

Servlet之文件下载

    通过浏览器客户端访问Servlet,实现存储于Tomcat服务器上的资源文件的下载效果,主要结合ServletResponse与IO流文件操作实现。原理图示如下:

指定文件目录

    首先新建项目servletDemo2,指定用于存放文件的路径为:

servletDemo2/files/

编写Servlet类

    通过继承HttpServlet,重写doGet()和doPost()方法,实现文件下载功能,此处约定使用GET请求,请求参数为:fname。

package com.xwd.demo;

import jdk.internal.util.xml.impl.Input;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;


public class FileDownLoad extends HttpServlet {
    private static final String FILE_DIR="files";

    //methods
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //super.doPost(req, resp);
        request.setCharacterEncoding("UTF-8");
        //解析参数
        String fname = request.getParameter("fname");
        System.out.println(fname);
        //获取ServletContext对象
        ServletContext servletContext = request.getServletContext();
        //获取相对路径
        String realPath = servletContext.getRealPath(FILE_DIR+ File.separator + fname);
        System.out.println(realPath);
        //获取媒体类型
        String mimeType = servletContext.getMimeType(fname);

        //设置响应头
        response.setHeader("Content-Disposition","attachment;filename="+realPath);
        //设置响应体编码格式
        response.setCharacterEncoding("UTF-8");
        //设置媒体类型
        response.setContentType(mimeType);
        System.out.println(mimeType);

        //以字节流输出文件
        InputStream is = new FileInputStream(realPath);
        ServletOutputStream os = response.getOutputStream();
        byte[] buffer=new byte[1024];
        int len=-1;
        while ((len = is.read(buffer)) != -1) {
            os.write(buffer,0,len);
        }
        //关闭流
        os.close();
        is.close();
    }
}


配置web.xml文件

    使用Servlet3.0以上的版本,也可直接使用@WebServlet注解配置

web.xml文件配置
    
        filedownLoad
        com.xwd.demo.FileDownLoad
    
    
        filedownLoad
        /filedownLoad
    
注解配置
@WebServlet(
        name = "filedownload",
        value = {"/filedownload"}
)
public class FileDownLoad extends HttpServlet {
}
启动项目,测试文件下载

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

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

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