Servlet之文件预览

    通过浏览器客户端访问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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是席木木啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值