Java 文件下载功能 解决中文乱码
Html部分
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="http://localhost:8080/webdemojava/download1?filename=a.flv" class="downloadbtn">a.flv</a>
<a href="http://localhost:8080/webdemojava/download1?filename=a.jpg" class="downloadbtn">a.jpg</a>
<a href="http://localhost:8080/webdemojava/download1?filename=a.mp3" class="downloadbtn">a.mp3</a>
<a href="http://localhost:8080/webdemojava/download1?filename=a.mp4" class="downloadbtn">a.mp4</a>
<a href="http://localhost:8080/webdemojava/download1?filename=a.txt" class="downloadbtn">a.txt</a>
<a href="http://localhost:8080/webdemojava/download1?filename=a.z1ip" class="downloadbtn">a.z1ip</a>
</body> </html>
Java代码
package action; 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 org.apache.jasper.tagplugins.jstl.core.Out; import sun.misc.BASE64Encoder; public class DownLoad1 extends HttpServlet {
private static final long serialVersionUID = 1L; public DownLoad1() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getParameter("filename"); //获取发送过来的文件名
filename = new String(filename.getBytes("ISO8859-1"),"UTF-8"); //解决传过来的文件名是中文.会变乱码的问题 //获得请求头中的 User-Agent
String agent = request.getHeader("User-Agent");
//根据不同的客户的 进行不同的编码 .解决下载的文件 中文 没名字
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE浏览器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
} String realPath = this.getServletContext().getRealPath("/download/"+filename); //相对路径变绝对路径
InputStream in = null;
try {
in = new FileInputStream(realPath); //读到要下载的文件.并做检测文件是否存在
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
if (in == null) {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().append("没有找到该文件");
return;
} ServletOutputStream out = response.getOutputStream();
response.setContentType(this.getServletContext().getMimeType(filename)); //设置返回的文件类型
response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //告诉客户的文件以附件类型打开(下载) int len = 0;
byte[] buffer = new byte[1024];
while ((len=in.read(buffer))>0) {
out.write(buffer, 0, len);
}
in.close();
out.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }
Java 文件下载功能 解决中文乱码的更多相关文章
- [Java Web]Struts2解决中文乱码问题
1.设置struts的字符编码,能够在struts.xml中添加下面代码: <constant name="struts.i18n.encoding" value=" ...
- Java下载文件解决中文乱码问题
直接上代码 /** * @desc 下载已存在的文件 */ public void sendFile(HttpServletRequest request, HttpServletResponse r ...
- java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)
转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可 ...
- java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...
- java解压多目录Zip文件(解决中文乱码问题)--转载
原文地址:http://zhangyongbo.iteye.com/blog/1749439 import java.io.BufferedOutputStream; import java.io.F ...
- 通过Java创建XML(中文乱码已解决)
package com.zyb.xml; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.Ou ...
- 解决Java保存到数据库中文乱码问题,加useUnicode=true&characterEncoding=UTF-8
Java保存到数据库中文乱码, 解决方法如下: 我们在连接MySQL数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8,但是问什 ...
- JAVA文件下载功能问题解决日志
今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...
- 04_过滤器Filter_02_Filter解决中文乱码问题
[过滤器解决中文乱码问题实例] [工程截图] [web.xml] <?xml version="1.0" encoding="UTF-8"?> &l ...
随机推荐
- Wannafly挑战赛18B 随机数
Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...
- 用Angule Cli创建Angular项目
Angular4.0来了,更小,更快,改动少 接下来为Angular4.0准备环境和学会使用Angular cli项目 1.环境准备: 1)在开始工作之前我们必须设置好开发环境 如果你的机器上还没有安 ...
- 爬取代理IP
现在爬虫好难做啊,有些网站直接封IP,本人小白一个,还没钱,只能找免费的代理IP,于是去爬了西刺免费代理,结果技术值太低,程序还没调试好, IP又被封了... IP又被封了... IP又被封了... ...
- 初学者下载使用Python遇到的问题看它就行了
首先在python管网(www.python.org)中找到对应的版本与系统,以(window7系统64位python3.7.3为例) 打开电脑--打开浏览器--输入www.python.org--d ...
- 使用vs2015编译、部署ssd-caffe(weiliu89版,CPU模式)
前因项目所需,须训练一个快速模型以实现目标物体的实时检测.历经多次实践,发现MobileNetSSD网络符合要求,故在本人工作PC上部署weiliu89版本的ssd-caffe以期用之训练项目要求之模 ...
- linux shell 完成批量压缩文件
首先得到文件列表 使用 list -1 注意是1 不是l 然后是用一个循环内包装zip代码 #!/bin/bash list=`` for var in $list do echo $var zip ...
- Unity — — UGUI之背包物品拖放
最新背包代码: Unity3D — — UGUI之简易背包 Unity版本:2017.3 功能:用UGUI实现简单的背包物品拖放/交换功能 一.简介 在UGUI下,物品的拖放脚本实现主要依赖于Unit ...
- trampoline蹦床函数解决递归调用栈问题
递归函数的调用栈太多,造成溢出,那么只要减少调用栈,就不会溢出.怎么做可以减少调用栈呢?就是采用"循环"换掉"递归". 下面是一个正常的递归函数. functi ...
- CS224n-作业1
0 前言 作业1对应的试题 作业1对应的启动代码 作业1主页 1 Softmax(10分) (a)(5分) 对于向量$x+c$的任一维度$i$,有: \begin{align*}\mbox{softm ...
- ubuntu安装中文输入法必看
ubuntu安装中文输入法必看以下两篇文章,按照顺序来做: http://www.2cto.com/os/201207/144189.html http://www.cnblogs.com/slide ...