文件下载(JavaWeb)
文件下载(Java实现)
- 页面显示超链接
- 点击超链接后,弹出下载框
- 完成图片文件下载
一、分析:
- 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,若不能,则默认下载。不满足需求
- 任何资源都必须弹出下载提示框
- 使用响应头设置资源的打开方式
content-disposition:attachment;filname=xxx
二、步骤:
1. 定义页面,编辑超链接的href属性,指向servlet
downloads.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Downloads</title>
</head>
<body>
<a href="/ResponseDemo/image/a.jpg">图片</a>
<hr>
<!--?后面跟的是参数, 将在Servlet中获取-->
<a href="/ResponseDemo/downloadServlet?filename=a.jpg">下载图片</a>
</body>
</html>
2. 编写Servlet
分析:
1. 获取页面传过来的参数
String filename = req.getParameter("filename");
2. 使用字节输入流将文件加载进内存
(1). 找到该文件的服务器路径
ServletContext context = this.getServletContext();
String realPath = context.getRealPath("/image/"+filename);
(2). 用字节流关联
FileInputStream fis = new FileInputStream(realPath);
(3). 设置response 的响应头
- 获取文件的mime类型
String mimeType = context.getMimeType(filename);
resp.setHeader("content-type",mimeType);
- 设置响应头类型 content-Type
resp.setHeader("content-type",mimeType);
- 设置响应头打开方式 content-disposition
resp.setHeader("content-disposition","attachment;filename="+filename);
(4). 将输入流的文件写出到输出流
ServletOutputStream sos = resp.getOutputStream();byte[] buff= new byte[1024*8];int len = 0;while ((len = fis.read(buff))!=-1){sos.write(buff,0,len);}
(5). 关闭输入流
fis.close();
- 注:输出流是req对象提供的,因此不用关闭
(二)、完整的Servlet代码:
DownloadServlet.java
package glut.zongmin.download;import javax.servlet.ServletContext;
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 java.io.FileInputStream;
import java.io.IOException;@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1. 获取请求参数,文件名称String filename = req.getParameter("filename");//2. 使用字节输入流将文件加载进内存//2.1 找到文件的服务器路径ServletContext context = this.getServletContext();String realPath = context.getRealPath("/image/"+filename);//2.2 用字节流关联FileInputStream fis = new FileInputStream(realPath);//3. 设置response 的响应头//3.1 设置响应头类型 content-Type//获取文件的mime类型String mimeType = context.getMimeType(filename);resp.setHeader("content-type",mimeType);//3.2 设置响应头打开方式 content-dispositionresp.setHeader("content-disposition","attachment;filename="+filename);//4. 将输入流的文件写出到输出流中,字节流不用刷新ServletOutputStream sos = resp.getOutputStream();byte[] buff= new byte[1024*8];int len = 0;while ((len = fis.read(buff))!=-1){sos.write(buff,0,len);}fis.close();}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req,resp);}
}
三、运行结果
点击图片(普通超链接):
点击下载图片
- 注:谷歌浏览器会跳过确认直接下载
文件下载(JavaWeb)相关推荐
- java webapp下文件下载,JavaWeb文件下载
java 文件下载 在此之前需要先简绍一下常见的MIME类型,以供之后使使用: 内容类型 文件扩展名 描述 application/msword doc Microsoft Word applicat ...
- Response文件下载
Response文件下载 javaweb 里的知识 觉得这个是学到啦 所以记录下来 方便下一次查看 简易代码 package com.hui.servlet;import javax.servlet. ...
- 继上一篇博客--javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)
通过动态分配地址来提升javaweb文件下载接口的其兼容性和可扩展性: (上篇博文地址:https://blog.csdn.net/weixin_37766296/article/details/80 ...
- JavaWeb实现文件下载
一.前言 我们这里要说的文件下载是包括word文档.Excel表格.PPT.image图片的下载,因为我们是基于JavaWeb实现的,所以web前端的界面是在JSP中实现的,而后台的响应是通过Serv ...
- javaweb开发之处理表单上传文件和文件下载
2019独角兽企业重金招聘Python工程师标准>>> 一.基于表单的上传文件 1. enctype属性 当表单需要上传文件时,需指定表单 enctype 的值为 multipart ...
- javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)
程序员在做web等项目的时候,往往都需要添加文件上传.下载.删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计的时候就会 ...
- IT兄弟连 JavaWeb教程 文件下载技术
● 列出提供下载的文件资源 我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFile ...
- javaweb实现文件下载用ajax请求,浏览器无响应的问题
最近做公司项目要实现用户通过浏览器从服务端下载文件的功能.于是,我写好了后台,然后前端用JQuery的ajax()方法发送请求到后台,按道理说是没有问题的,包括相应头的设置都没问题,但是点击下载按钮过 ...
- JavaWeb - Servlet实现文件下载漂亮小姐姐视频(文末有小姐姐视频Gif图哦)
文件下载案例: * 文件下载需求:1. 页面显示超链接2. 点击超链接后弹出下载提示框3. 完成图片文件下载* 分析:1. 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出 ...
最新文章
- 瑞文标准推理测试软件,瑞文标准推理测验标准答案表
- [gic]-ARM gicv3/gicv4的详细介绍-2020/12
- angularjs html 缓存,如何删除使用AngularJS的HTML中的浏览器缓存?
- html 正则表达式验证金额,js金额校验,js正则表达式,包含正负,小数点后两位...
- 冰豹lua驱动设置_卡宴?卡宴!——冰豹ROCCAT Kain 120 AIMO开箱
- mysql sphfiks_使用sphinx索引mysql数据
- java8 bigdecimal_在java 8中并行使用BigDecimal进行分组和求和
- 图灵机器人和ichat
- 计算机coreldraw课程PPT,[计算机]CorelDRAW_12基础教程.ppt
- JSON转对象、List
- trados 有道api_塔多思翻译附插件下载-外语准确机翻工具插件(TRADOS)下载2019版-西西软件下载...
- 由火车上的查票事件所引起的思考
- 带遮挡效果的轮廓线(描边)在3D实时渲染中的一种实现
- 一步步认识jdk 我们的朋友 之Arrays
- r720服务器怎么查看硬盘性能,r720服务器如何看配置
- RocketMQ-Retry
- 【控制】自适应控制,模型参考自适应控制,公式推导,有程序有结果图
- 8-16位密码,英文大小写,数字,特殊字符_~@#$^至少包含3种,且不能4位连续重复或者串联(aaaa,1234,abcd,fedc···)
- 解决实际维护网络过程故障的五个盲点
- 解决Unity3D中多层级结构子物体旋转受父物体尺寸影响的问题
热门文章
- jquery grid设置行背景色
- Neo4j 使用场景
- java区块链_JAVA区块链项目实战
- php判断是否safari,js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本_javascript技巧...
- 黑客窃取 4 亿 Twitter 用户记录,勒索马斯克破财消灾
- Vue中计算属性和axios基本使用回顾
- Python 编写shell脚本
- 监控用户鼠标点击、停留行为,美国棒约翰披萨被顾客起诉赔偿
- 海外华人代购系统、代购源码PHP前端源码参数说明
- 【Minecraft开服】Windows搭建我的世界MC服务器「公网远程联机」