JavaWeb中文件下载

1.首先在WebContent目录下新建一个文件夹download并准备下载素材

2.编写download.html下载页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>通过<a></a>标签下载文件</h1>
<a href="/WEB14/download/a.flv">a.flv</a><br>
<a href="/WEB14/download/a.jpg">a.jpg</a><br>
<a href="/WEB14/download/a.mp3">a.mp3</a><br>
<a href="/WEB14/download/a.mp4">a.mp4</a><br>
<a href="/WEB14/download/a.txt">a.txt</a><br>
<a href="/WEB14/download/a.zip">a.zip</a><br>
<h1>通过编写代码下载文件</h1>
<a href="/WEB14/downloadServlet2?fname=a.flv">a.flv</a><br>
<a href="/WEB14/downloadServlet2?fname=a.jpg">a.jpg</a><br>
<a href="/WEB14/downloadServlet2?fname=a.mp3">a.mp3</a><br>
<a href="/WEB14/downloadServlet2?fname=a.mp4">a.mp4</a><br>
<a href="/WEB14/downloadServlet2?fname=a.txt">a.txt</a><br>
<a href="/WEB14/downloadServlet2?fname=a.zip">a.zip</a><br>
<a href="/WEB14/downloadServlet2?fname=美女.jpg">美女.jpg</a><br>
</body>
</html>

3.编写Servlet:DownloadServlet2并配置web.xml

 <servlet>
    <servlet-name>DownloadServlet2</servlet-name>
    <servlet-class>com.wenhao.context.DownloadServlet2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownloadServlet2</servlet-name>
    <url-pattern>/downloadServlet2</url-pattern>

  </servlet-mapping>

DownloadServlet2.java




package com.wenhao.context;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sun.misc.BASE64Encoder;


public class DownloadServlet2 extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/******中文名称下载*******/


// 获得请求的文件名
String fname = request.getParameter("fname");

//解决中文参数的乱码问题(getByte("")中的编码为request所设置的默认编码)
fname = new String(fname.getBytes("UTF-8"),"UTF-8");

//获得请求头中的User-Agent
String agent = request.getHeader("User-Agent");
//根据不同的浏览器进行不同的编码
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE浏览器
filenameEncoder = URLEncoder.encode(fname, "utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(fname.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filenameEncoder = URLEncoder.encode(fname, "utf-8");
}
//要下载的这个文件的类型-------客户端通过文件的MIME类型去区分类型
response.setContentType(this.getServletContext().getMimeType(fname));
//告诉客户端文件不是直接解析,而是以附件的形式保存
response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);
// 打开文件的绝对路径
String realPath = this.getServletContext().getRealPath("/download/"+fname);
// 获取输入流
InputStream is = new FileInputStream(realPath);
// 输出流
ServletOutputStream out = response.getOutputStream();
int len = 0 ;
byte[] flush = new byte[1024];
while(-1!=(len=is.read(flush))) {
out.write(flush, 0, len);
}
is.close();

}


public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}


猜你喜欢

转载自blog.csdn.net/a_jungle/article/details/80070570