java web文件下载功能实现

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

两种实现方法:

    一:通过超链接实现下载

在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服务器,即可实现对压缩包和对图片的下载。

时间: 2024-10-18 02:03:49

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

JSP+Servlet制作Java Web登录功能的全流程解析_JSP编程

0.新建web项目首先,在MyEclipse里新建java web项目,项目名为login.此时,项目中包含一个src文件夹和一个WebRoot文件夹,以及Java Web自带的JRE库文件夹和J2EE库文件夹.其中,在WebRoot文件夹下,包含了WEB-INF文件夹和一个index.jsp页面文件. 接下来,新建一个JSP页面,命名为login.jsp. 项目文件的结构如下: 1.设计login.jsp页面打开login.jsp页面后,修改第一行的代码为pageEncoding="utf-8

java web购物车功能实现原理及代码编写

目前常见的web购物车实现方法主要是三种:1.用cookie实现购物车:2.用session实现购物车:3.用cookie和数据库(购物车信息持久化)实现购物车: ========================================================================= 分析一下这三种方法的优缺点: 1.单纯有cookie实现购物车,这样的购物车不是很理想,设想一下,如果客户端的浏览器把cookie给禁用了, 这种方法就会在这里流产... 2.sessio

java web-Java web项目功能实现问题

问题描述 Java web项目功能实现问题 求大牛指点迷津 是这样的 我在做一个web项目 其中牵扯一个关于密码的功能 就是为了保护用户的密码安全 让系统自动调用电脑里面的XX.exe登陆程序 并且自己输入密码不让第三方人知道 请问这个功能能实现吗? 或者请大牛给个方向让我去找找资料 如果有大牛能帮助我做出来 我愿意以身相许的啊 男的搞基 女的....... 解决方案 基于你的需求 在js中 调用 Run('notepad') 这种方式即可. 注意的有以下几点 1,此方法仅仅兼容IE. 2,要确

Java Web应用程序实现基础的文件下载功能的实例讲解_java

基础思路:之前的思路一直是弹出一个框问用户想要存放文件的位置,然后我再生成个文件放到那.然而我这个想法并没有成功. 点击链接来下载文件的方式很简便,后台把文件流输出来,通过浏览器实现下载功能,包括询问位置与文件存放,大多数浏览器会配置一个固定位置,不一定每次都问. 前端就非常简单了,一个<a>标签,href="后台方法地址",如果你的需求不能直接用超链接方式,可以在js里写 window.location.href ="后台方法地址". 这样跳转到后台方

java web端实现图片编辑功能

问题描述 java web端实现图片编辑功能 求助高手提供个web端图片编辑功能的例子,实现马赛克.剪裁功能即可,jquery中是否有相关插件?或者其他插件都可以 谢谢 解决方案 可以用flash.我见过几个在线绘图/美化图片/涂鸦的都是基于flash的. 解决方案二: 裁剪需要直接修改二进制文件,用javascript好像做不到.用插件的话,似乎applet可以,但是applet现在快subset了. 云端应用直接运行在本地,这是个方向.你可以研究下citrix.

源代码- java web 项目中,如何实现显示的页面带关键字搜索功能

问题描述 java web 项目中,如何实现显示的页面带关键字搜索功能 我有一个关键字表 表结构如下 Id ID 关键字 Keywords 链接 Link 优先级 priority 0 默认 1初级 2中级 3高级 匹配次数 mateCount 0全文匹配 1只为第一个出现的关键字匹配 里面的数据格式为 ID Keywords Link priority mateCount 1 龙投网 http://www.lootou.cn 3 0 2 股票入门 http://www.lootou.cn/gu

ssh-SSH框架,java web实现了打印功能,但是我每次打印显示的都是上一次内容,刷新才正常

问题描述 SSH框架,java web实现了打印功能,但是我每次打印显示的都是上一次内容,刷新才正常 SSH框架,java web实现了打印功能,但是我每次打印显示的都是上一次内容,刷新才正常,请教各位大神这是什么原因,我是个新手~希望能够得到具体方法帮忙改正. 解决方案 直接每次打印后.设置刷新不就好 了 解决方案二: 没有代码,肯定没法给你具体解决办法.你可以先刷新在打印,这样试试.

Servlet+JavaBean+JSP打造Java Web注册与登录功能_java

采用Java Web所实现的MVC结构图如下,其中控制器部分采用Servlet来实现,模型部分采用JavaBean来实现,而大部分的视图采用Jsp页面来实现. 思想基础JSP+JavaBean两层结构工作原理应该是比较熟悉的,也比较好理解. 但是有一点必须要清楚就是用户通过浏览器来发送网页的请求,此请求到达服务器后在服务器端查找对应的网页,如果是首次请求(第二次就不用解释执行了),对于JSP来说要生成Servlet,然后通过Servlet引擎来执行 Servlet,把调用JavaBean的结果嵌

设计-数据计算量大、存储量大但是功能简单的java Web程序,采用什么框架比较好?

问题描述 数据计算量大.存储量大但是功能简单的java Web程序,采用什么框架比较好? 如题,我是开发人员刚刚接触设计,现在有一个项目是数据的存储量和计算量比较大,但是功能相对简单,选用什么框架比较好呢?能尽量使存储效率和计算速率都比较高? 是b/s结构的程序,是否需要用ssh或者ssi? 谢谢! 解决方案 数据计算量大,不适合放在web应用层来做,应该用后台作业去完成.因为web应用层不适合维持长期的连接和长时占用计算资源. 解决方案二: 直接servlet/jsp就行呗. 解决方案三: 个