0
点赞
收藏
分享

微信扫一扫

Servlet之文件预览

哈哈我是你爹呀 2022-02-04 阅读 65

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

在这里插入图片描述

指定文件目录

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

servletDemo2/files/

在这里插入图片描述

编写Servlet类与注解配置

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

package com.xwd.demo;

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

/**
 * @ClassName FilePreView
 * @Description: com.xwd.demo
 * @Auther: xiwd
 * @Date: 2022/2/4 - 02 - 04 - 0:13
 * @version: 1.0
 */
@WebServlet(
        name = "fileprew",
        value = {"/fileprew"}
)
public class FilePreView extends HttpServlet {
    //properties
    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 req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req, resp);
        req.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");
        //解析参数
        String fname = req.getParameter("fname");
        System.out.println(fname);
        //获取ServletContext对象
        ServletContext servletContext = req.getServletContext();
        //获取文件的绝对路径
        String realPath = servletContext.getRealPath(FILE_DIR + File.separator + fname);
        String mimeType = servletContext.getMimeType(fname);
        //获取文件的媒体类型
        resp.setContentType(mimeType);
        //输出文件
        InputStream is=new FileInputStream(realPath);
        OutputStream os = resp.getOutputStream();
        BufferedOutputStream bos=new BufferedOutputStream(os);
        byte[] buffer=new byte[1024];
        int len=-1;
        while ((len = is.read(buffer)) != -1) {
            bos.write(buffer,0,len);
        }
        //关闭流
        bos.flush();
        bos.close();
        is.close();
    }
}

启动项目,测试文件预览效果

在这里插入图片描述

举报

相关推荐

0 条评论