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 文件下载功能 解决中文乱码的更多相关文章

  1. [Java Web]Struts2解决中文乱码问题

    1.设置struts的字符编码,能够在struts.xml中添加下面代码: <constant name="struts.i18n.encoding" value=" ...

  2. Java下载文件解决中文乱码问题

    直接上代码 /** * @desc 下载已存在的文件 */ public void sendFile(HttpServletRequest request, HttpServletResponse r ...

  3. java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)

    转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可 ...

  4. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...

  5. java解压多目录Zip文件(解决中文乱码问题)--转载

    原文地址:http://zhangyongbo.iteye.com/blog/1749439 import java.io.BufferedOutputStream; import java.io.F ...

  6. 通过Java创建XML(中文乱码已解决)

    package com.zyb.xml; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.Ou ...

  7. 解决Java保存到数据库中文乱码问题,加useUnicode=true&characterEncoding=UTF-8

    Java保存到数据库中文乱码, 解决方法如下: 我们在连接MySQL数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8,但是问什 ...

  8. JAVA文件下载功能问题解决日志

    今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...

  9. 04_过滤器Filter_02_Filter解决中文乱码问题

    [过滤器解决中文乱码问题实例] [工程截图] [web.xml] <?xml version="1.0" encoding="UTF-8"?> &l ...

随机推荐

  1. 07- django组件:中间件

    1.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...

  2. CI/CD系列

    一.CI/CD系列 什么是CI/CD(译) Docker与CI/CD(转) Docker和CI/CD实战 二.Git 三.GitLab

  3. Unity生成简易二维码

    最近项目需求,需要在Unity中动态生成二维码.所以就研究了一下,下面把动态生成二维码的方法向大家分享一下. 第一种方法 需要一个 ZXing.dll文件. 下载地址我会在文章结尾给出. 直接将下载好 ...

  4. 解决k8s出现pod服务一直处于ContainerCreating状态的问题的过程

    参考于: https://blog.csdn.net/learner198461/article/details/78036854 https://liyang.pro/solve-k8s-pod-c ...

  5. <React Native移动开发实战>-1-React Native的JSX解决方案

    JSX并不是一门新的开发语言,而是Facebook提出的语法方案:一种可以在JavaScript代码中直接书写HTML标签的语法糖,所以,JSX本质上还是JavaScript语言. 小知识:语法糖(S ...

  6. Go文件右键编译

    辛辛苦苦写好了.go文件 发现编译还得敲命令才行,或许配置一个好用点的IDE环境可以解决 但是有时候实在不想开IDE 于是在右键添加了一个编译功能 首先保证go相关的环境变量配置正确 Windows ...

  7. Mysql数据库的四大特性

    Mysql数据库事务的四大特性(ACID) 事务:把一组密不可分的操作系列集合在一起,这些操作要么全部执行,要么全部不执行. 1.原子性:事务是内定义的操作是一个整体,是不可分割的. 2.一致性:事务 ...

  8. aircrack-ng无线破解实验

    查看无线网卡 airmon-ng 开启网卡监听模式 airmon-ng start wlan0 扫描附近的wifi airodump-ng wlan0mon 停止扫描: ctrl c 使用airodu ...

  9. ssh软件及命令的使用

    常用软件安装及使用目录 第1章 ssh常用用法小结 1.1 连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以 ...

  10. scrapy笔记集合

    细读http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html 目录 Scrapy介绍 安装 基本命令 项目结构以及爬虫应用介绍 简单使用示例 选 ...