文件下载(休闲时间来一段)

本文介绍了如何在服务器端通过ServletContext获取文件名,然后读取文件内容,设置Content-Type和Context-Disposition请求头以指示浏览器下载,并使用IOUtils.copy实现数据流传输的过程。
摘要由CSDN通过智能技术生成

1.在服务器端获取下载的文件名称(downLoadName)

String downLoadName = "文件名";

2.读取该文件

//通过servletContenxt对象获取,不是req.getParameter()
ServletContext servletContext = req.getServletContext();
//在服务器中“/”表示直接为http://ip:part/项目名  服务器映射到web目录下
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downLoadName);

3.将获取的数据从输入流传到输出流(这次不使用数组传数据流,直接使用工具类方法--IOUtils.copy())

//创建输出流
OutputStream outputStream = resp.getOutputStream();
//使用IOUtils.copy(),见明知意,直接将输入流数据复制到输出流
IOUtils.copy(resourceAsStream,outputStream);

4.在回传数据之前必须告诉客户端(浏览器)他要下载文件的类型(通过请求头Header告诉),而下载文件的类型可以在2中知道,方法如下

String mimeTyoe = servletContext.getMimeType("/file" + downLoadName);

而需要通过请求头告诉客户端,这一步应该在回传数据前操作,故先操作4,再操作3

resp.setContextType(mimeType);

5.通过请求头告诉客户端下载文件类型外,还需要告诉客户端收到的数据是要下载使用,故还是使用请求头告诉客户端,操作如下

//你需要知道
//Context-Disposition 表示客户端对收到数据进行处理,
//attachment 附件的意思,即表示对数据下载的意思,再加上文件名
resp.setHeader("Context-Disposition","attachment;filename = " + downLoadName);

总结,代码步骤顺序为 1、2、4、5、3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值