文件下载

浏览器可以解析资源文件的下载

服务器中的images资源中放了图片资源,使用超链接的形式直接可以获取文件,但是浏览器会把自己能文件解析并显示出来,不能解析的资源以附件的形式保存起来。但是不同的浏览器功能不一样,这种方式不可取。

<a href="${pageContext.request.contextPath}/images/aaa.jpg">照片1</a><br>
<a href="${pageContext.request.contextPath}/images/bbb.exe">照片2</a><br>
<a href="${pageContext.request.contextPath}/images/ccc.jpg">照片3</a><br>
<a href="${pageContext.request.contextPath}/images/ddd.jpg">照片4</a><br>

任何资源以附件形式下载

步骤
1.修改响应到客户端的请求头的一个值,让浏览不能自己解析文件。
2.连接到资源文件的输入流。
3.获取相应到客户端的输出流,并将输入流中的数据输出到客户端中。
资源文件名乱码问题
1.将文件名按当前字符编码编码
2.按目标字符解码(浏览器只能接受iso8859-1的字节,因为我们的index.jsp页面设置了utf-8的编码格式,浏览器会再将接受iso8859-1的字节编码为utf-8格式,不会出现乱码问题)

package fileDownloads;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DwnloadServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String filename ="美女.jpg";
		//解决文件名中文乱码
		//打撒:按当前字符编码
		byte[] bytes = filename.getBytes("utf-8");
		
		//组装:按目标字符解码
		filename = new String(bytes,"ISO8859-1");
		//修改头部信息content-disposition的值为attachment,并设置文件名
		response.setHeader("content-disposition", "attachment;filename="+filename );
		//获取连接服务器中资源的输入流
		InputStream is = this.getServletContext().getResourceAsStream("/images/1.jpeg");
		//获取输出流
		ServletOutputStream out= response.getOutputStream();
		int len =-1;
		byte[] buf = new byte[1024];
		while((len=is.read(buf))!=-1){
			out.write(buf, 0, len);
		}
		
		
	}
	
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/dwnloadServlet">照片一</a><br>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值