不指定虚拟路径的前提下通过http访问pdf、图片等文件

  

  通常我们通过http访问图片或者pdf的时候都是将文件上传到指定文件夹下面,然后通过配置虚拟路径来访问指定的资源。

  在不配置虚拟路径的情况下,我们通过获取到response的outpurstream,然后向该outputstream输出指定的文件也可以,用IOUtils工具类更是简单方便。

例如:

  依赖的包:

    

 

复制代码
package cn.qlq.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

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 org.apache.commons.io.IOUtils;

/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        FileInputStream in = null;
        ServletOutputStream outputStream = null;
        try {
            in = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\测试文档\\Java开发-太原科技大学-软件工程-乔利强.pdf"));
            outputStream = response.getOutputStream();
            IOUtils.copyLarge(in, outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(in);
            IOUtils.closeQuietly(outputStream);
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
复制代码

测试:

 

补充:对于浏览器能解析的文件会解析,而对于浏览器不能解析的会下载,比如说docx等文件,如果想实现任何文件都下载,可以对response进行设置,如下:

            response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "attachment;fileName=" + path);

 

posted @   QiaoZhi  阅读(1189)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2017-08-21 struts2的action类详解
2017-08-21 struts配置详解
2017-08-21 struts入门
2017-08-21 java中Map,List与Set的区别
2017-08-21 struts集合类型封装
2017-08-21 struts获得参数(属性,对象,模型驱动)
2017-08-21 Struts访问servletAPI方式
点击右上角即可分享
微信分享提示