\"\"

DownloadServlet:
 

package com.yuming.servlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

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


import com.yuming.util. 64Util;

/**
 * Servlet implementation class DownloadServlet
 */
public class DownloadServlet extends HttpServlet {

		protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			
			//1. 获取要下载的文件名字 aa.jpg  --- inputStream
			String fileName = request.getParameter(\"filename\");
			
			//get请求,这个fileName有中文
			fileName = new String(fileName.getBytes(\"UTF-8\"),\"UTF-8\");
			System.out.println(\"fileName=\"+fileName);
			
			
			//2. 获取这个文件在tomcat里面的绝对路径地址
			String path = getServletContext().getRealPath(\"download/\"+fileName);
			
			/**
			 * 如果文件的名字带有中文,需要对文件名进行编码处理
			 * 
			 * IE/chrome 使用URLEncoding编码
			 * 
			 * Firefox ,使用 64 编码
			 */
			String clientType = request.getHeader(\"User-Agent\");
			if(clientType.contains(\"Firefox\")){
				fileName =  64Util. 64EncodeFileName(fileName);
			}else{
				//IE ,或者  Chrome (谷歌浏览器) ,
				//对中文的名字进行编码处理
				fileName = URLEncoder.encode(fileName, \"UTF-8\");
			}
			
			//让浏览器收到这份资源的时候, 以下载的方式提醒用户,而不是直接展示。 
			response.setHeader(\"Content-Disposition\", \"attachment; filename=\"+fileName);
			
//			response.setStatus(302);
//			response.setHeader(Location, \"login_success.html\");
			
			//
			//response.sendRedirect(\"login_success.html\");
			
			//3. 转化成输入流
			InputStream is = new FileInputStream(path);
			OutputStream os = response.getOutputStream();
			
			int len = 0 ;
			byte[]buffer = new byte[1024];
			while( (len = is.read(buffer)) != -1){
				os.write(buffer, 0, len);
			}
			
			os.close();
			is.close();
		
		}

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

64Util:
 

package com.yuming.util;

import java.io.UnsupportedEncodingException;

import sun.misc. 64Encoder;

public class  64Util {
	
	public static String  64EncodeFileName(String fileName) {
		 64Encoder  64Encoder = new  64Encoder();
		try {
			return \"=?UTF-8?B?\"
					+ new String( 64Encoder.encode(fileName
							.getBytes(\"UTF-8\"))) + \"?=\";
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

}

web. :
 

<?  version=\"1.0\" encoding=\"UTF-8\"?>
<web-app  ns:xsi=\"http://www.w3.org/2001/ Schema-instance\"
	 ns=\"http://java.sun.com/ /ns/javaee\"
	xsi:schemaLocation=\"http://java.sun.com/ /ns/javaee http://java.sun.com/ /ns/javaee/web-app_2_5.xsd\"
	id=\"WebApp_ID\" version=\"2.5\">
	<display-name>Download</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<de ion></de ion>
		<display-name>DownloadServlet</display-name>
		<servlet-name>DownloadServlet</servlet-name>
		<servlet-class>com.yuming.servlet.DownloadServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DownloadServlet</servlet-name>
		<url-pattern>/DownloadServlet</url-pattern>
	</servlet-mapping>
</web-app>

download.html:
 

<!DOCTYPE html>
<html>
<head>
<  charset=\"UTF-8\">
< >Insert   here</ >
</head>
<body>

	<h2>tomcat默认servlet提供下载</h2>
	<a href=\"download/aa.jpg\">aa.jpg</a><br />
	<a href=\"download/bb.txt\">bb.txt</a><br />
	<a href=\"download/cc.rar\">cc.rar</a><br />
	
	<br>手动编码提供下载。:<br>
	<a href=\"DownloadServlet?filename=aa.jpg\">aa.jpg</a><br>
	<a href=\"DownloadServlet?filename=bb.txt\">bb.txt</a><br>
	<a href=\"DownloadServlet?filename=cc.rar\">cc.rar</a><br>
	<a href=\"DownloadServlet?filename=大海.jpg\">大海.jpg</a><br>

</body>
</html>

 

 谷歌,火狐都可以下载哟...

 有个问题,求解

\"\"

 

收藏 打印