java web文件下载功能实现

2023-05-16

需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片

两种实现方法:

    一:通过超链接实现下载

在HTML网页中,通过超链接链接到要下载的文件的地址
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>通过链接下载文件</h1>
<a href="/day06/download/cors.zip">压缩包</a>
<a href="/day06/download/1.png">图片</a>
</body>
</html>

其中day06/download是文档路径,本实例的程序结构如下:
程序运行后,可以通过单击需要下载文档实现下载
但是这里会出现一个问题,就是单击下载压缩包的时候会弹出下载页面,但是下载图片的时候浏览器就直接打开了图片,没有下载。
    这是因为通过超链接下载文件时,如果浏览器可以识别该文件格式,浏览器就会直接打开。只有浏览器不能识别该文件格式的时候,才会实现下载。因此利用第二种方法实现下载功能。

    二:通过Servlet程序实现下载

    通过Servlet下载文件的原理是通过servlet读取目标程序,将资源返回客户端。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>通过链接下载文件</h1>
<a href="/day06/download/cors.zip">压缩包</a>
<a href="/day06/download/1.png">图片</a>
<h1>通过servlet程序下载文件</h1>
<a href="/day06/ServletDownload?filename=cors.zip">压缩包</a>
<a href="/day06/ServletDownload?filename=1.png">图片</a>
</body>
</html>

其中,/day06/ServletDownload 是servlet程序的映射路径
然后新建一个servlet,名称为ServletDownload,URL映射为/ServletDownload
添加代码如下:
package com.lsgjzhuwei.servlet.response;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletDownload
 */
@WebServlet(asyncSupported = true, urlPatterns = { "/ServletDownload" })
public class ServletDownload extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletDownload() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//获得请求文件名
		String filename = request.getParameter("filename");
		System.out.println(filename);
		
		//设置文件MIME类型
		response.setContentType(getServletContext().getMimeType(filename));
		//设置Content-Disposition
		response.setHeader("Content-Disposition", "attachment;filename="+filename);
		//读取目标文件,通过response将目标文件写到客户端
		//获取目标文件的绝对路径
		String fullFileName = getServletContext().getRealPath("/download/" + filename);
		//System.out.println(fullFileName);
		//读取文件
		InputStream in = new FileInputStream(fullFileName);
		OutputStream out = response.getOutputStream();
		
		//写文件
		int b;
		while((b=in.read())!= -1)
		{
			out.write(b);
		}
		
		in.close();
		out.close();
	}

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

}

重启tomcat服务器,即可实现对压缩包和对图片的下载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java web文件下载功能实现 的相关文章

随机推荐

  • 全网最简单Win10桌面美化教程,只需4步!!

    时间过得真滴快呀 xff01 咋眼就10月了 不知道国庆期间 小伙伴们是外出旅游 还是宅在家里哪里也没去 或者更悲催一点 还在国庆加班抑或因为疫情正在隔离 无论大家处于任何状态 小七都要在这里祝大家 xff1a 国庆节快乐 吉祥话说完了 下
  • Pycharm配置Jupyter Notebook实现本地开发与调试

    Pycharm专业版中集成了Jupyter Notebook xff0c 方便用户编辑 xff0c 执行和调试Notebook代码 xff0c 并检查执行输出 个人感觉 xff0c 相比于Jupyter提供的网页编辑器 xff0c Pych
  • Zookeeper选举机制介绍

    ZooKeeper是一个高可用的分布式协调服务 xff0c 它的核心功能之一就是选举机制 当ZooKeeper集群中的一个节点宕机时 xff0c 需要通过选举机制来选出一个新的leader节点 xff0c 确保集群的正常运行 下面是ZooK
  • redis实现布隆过滤器

    Redis是一种基于内存的数据存储系统 xff0c 具有高性能 高可用性 高扩展性等特点 xff0c 因此被广泛用于实现布隆过滤器 以下是一种基于Redis实现布隆过滤器的方案 xff1a 创建一个长度为m的位数组 xff08 bit ar
  • 解决shiro的登录成功后跳转到自定义error.html的问题

    解决shiro的登录成功后跳转到error html 1 先说一下问题现象 xff1a saas项目中 xff0c 登录成功之后 xff0c 跳转了error html xff0c 停顿一会儿后进入主页面 2 说一下我处理这个问题的步骤 x
  • 喜茶皇茶茶叶带您走上致富之路

    我国是茶文化的发源地 xff0c 尤其是南方各类品种的茶层出不穷 xff0c 茶韵茶香引人入胜 消费者生活水平大幅提高 xff0c 饮茶几乎已经成为一种时尚 xff0c 皇茶 在市场上受到大家的认可与喜爱 xff0c 短短时间内迅速发展壮大
  • 处理Spire.Pdf 生成书签有 Evaluation Warning : The document was created with Spire.PDF for .NET.字样的问题

    处理spire Pdf生成时的警告信息 这俩天在使用spire Pdf生成书签的时候总是会有Evaluation Warning The document was created with Spire PDF for NET 的警告字样 x
  • Android Drawable Preview插件适配Android Studio4.1版发布

    Android Drawable Preview是一个在安卓开发中非常有用的AS IDEA插件 可以将drawable资源文件的icon替换成内容的预览图 达到不需要打开资源文件 快速预览内容的功能 实在是非常的方便快捷 让开发工作更加的愉
  • 变频器的逆变、变频原理

    变频器的逆变 变频原理 YJZhang 从事制造业质量管理 xff0c 做过PCBA 线束 电话机 变频器行业 90 人赞同了该文章 变频器将直流电转变为交流电的这个过程叫 逆变 xff08 inverting 先讲逆变过程 xff0c 分
  • ubuntu20.04设置自动文字模式登录

    文字模式登录后取得的程序称为 Shell xff08 壳 xff09 xff0c Linux 的壳程序是bash xff08 Bourne Shell的增强版本 xff09 设置文字模式登录 xff1a 第一步 xff1a 进入grub文件
  • 从高考到程序员

    记得当年进入考场的时候也是志气满满 xff0c 心里念叨着一定要考上自己理想的大学 xff0c 光宗耀祖 当时坐在学校安排的bus上向考场的方向行进 xff0c 看到路边的交警叔叔 xff0c 情不自禁的喊了一声 xff0c 交警大哥辛苦了
  • Android内存优化(二)之如何分析native heap

    如何获取native heap请阅读上篇文章 xff0c 本篇文章将主要介绍如何分析一个native heap文件 xff0c 以及我们的native memory leak问题如何发现并定位 首先先来看一下实际中我们看到的native h
  • 基于springboot的薪资管理系统设计

    一 系统介绍 项目源码 xff1a https gitee com oklongmm code 这是一个界面简洁的薪资管理系统 xff0c 虽然界面简单 xff0c 但其工资项配置 xff0c 与考勤挂钩 xff0c 自动核算功能强大 xf
  • Dijkstra算法详解

    1 dijkstra算法简介 Dijkstra算法是由E W Dijkstra于1959年提出 xff0c 又叫迪杰斯特拉算法 xff0c 它应用了贪心算法模式 xff0c 是目前公认的最好的求解最短路径的方法 算法解决的是有向图中单个源点
  • C++建立动态二维数组

    C 43 43 建立动态二维数组主要有两种方法 xff1a 1 使用数组指针 xff0c 分配一个指针数组 xff0c 将其首地址保存在b中 xff0c 然后再为指针数组的每个元素分配一个数组 int b 61 new int row 分配
  • 理解负载均衡

    什么是平均负载 xff1f 单位时间内 xff0c 系统处于可运行状态和不可中断状态的平均进程数 xff0c 也就是平均活跃进程数 xff0c 它和CPU使用率并没有直接关系 所谓可运行状态的进程 xff0c 是指正在使用CPU或者等待CP
  • 理解CPU使用率和CPU上下文切换

    1 CPU使用率 1 1 CPU使用率查看 当发现服务或机器卡的时候 xff0c 我们都是先通过top命令查看服务器CPU使用率 默认每3秒刷新一次 top top 18 10 58 up 1216 days 7 38 4 users lo
  • 自动驾驶概述

    1 自动化能力定义 对自动驾驶能力有多个定义标准 xff0c 比较常用的是SAE International关于自动化层级的定义 具体是 L0 驾驶员完全掌控车辆 L1 自动系统有时能够辅助驾驶员完成某些驾驶任务 L2 自动系统能够完成某些
  • java遍历泛型的方法

    一 List遍历 Java中List遍历有三种方法来遍历泛型 xff0c 主要为 xff1a 1 for循环遍历 2 iterator遍历 3 foreach遍历 package com gmail lsgjzhuwei import ja
  • java web文件下载功能实现

    需求 xff1a 实现一个具有文件下载功能的网页 xff0c 主要下载压缩包和图片 两种实现方法 xff1a 一 xff1a 通过超链接实现下载 在HTML网页中 xff0c 通过超链接链接到要下载的文件的地址 lt DOCTYPE htm