Servlet实例:一个下载图片的页面

本例中实现了一个下载图片的页面,点击不同的按钮可以下载不同的图片

 

实例中用到的图片文件在目录中如下所示:

Servlet实例:一个下载图片的页面

首先编写jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Photos</title>
<style type="text/css">
#dog{
    background: url("./Photos/dog.jpg");
    background-size: contain;
    width: 200px;
    height:200px;
}
#cat{
    background: url("./Photos/cat.jpg");
    background-size: contain;
    width: 200px;
    height:200px;
}
</style>
</head>
<body>
    <div id = "dog">

    </div>
    <a href="">点我下载</a>
    <div id = "cat">

    </div>
    <a href="">点我下载</a>
</body>
</html>

页面效果如图所示:

Servlet实例:一个下载图片的页面

 

 

 接下来需要编写Servlet,实现文件下载功能

Servlet实例:一个下载图片的页面

 

 

 这里我们只编写一个Servlet,根据提交请求中的信息向浏览器响应不同的下载

规定一个photoNum参数,photoNum = 1表示下载第一张图片,photoNum = 2 表示下载第二张图片

修改jsp文件中的a标签属性:

<div id = "dog">

    </div>
    <a href="/test/Download?photoNum=1">点我下载</a>
    <div id = "cat">

    </div>
    <a href="/test/Download?photoNum=2">点我下载</a>

继续编写Servlet的doGet方法:

首先

获取请求行中的图片编号

String photoNum = request.getParameter("photoNum");

获得文件名:

String filename = "";
        if(photoNum.equals("1")) {
            filename = "dog.jpg";
        }
        if(photoNum.equals("2")) {
            filename = "cat.jpg";
        }

根据文件名获得文件字节输入流对象,这里需要使用上下文对象来获取该图片在服务器上的真实地址:

FileInputStream fis = new FileInputStream(context.getRealPath("/Photos/"+filename));

输入流对象有了,加下来需要从响应对象中获取输出流,并且需要设置浏览器不要解析该图片,要下载该图片

        ServletOutputStream sos = response.getOutputStream();
        
        //通过上下文对象的getMime方法,传入文件路径,获取文件的类型
        response.setContentType(context.getMimeType("/test/Photos/"+filename));
        response.setHeader("Content-Disposition","attachment;filename="+filename);

复制文件(下载过程其实就是从服务器把一个文件复制到客户端):

int length = 0;
        byte[] buffer = new byte[64];
        
        while((length = fis.read(buffer))!=-1) {
            sos.write(buffer,0,length);
        }
        
        fis.close();

运行测试:

Servlet实例:一个下载图片的页面

 

上一篇:win10uwp调用Microsoft.Windows.Photos_8wekyb3d8bbwe应用


下一篇:金蝶Apusic 应用服务器9.0版本上,springboot项目关于文件上传的一个问题