.html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body> <h1>
使用<a>标签的方式实现文件下载
</h1>
<a href="/WEB14/download/a.txt">a.txt</a>
<br>
<a href="/WEB14/download/a.jpg">a.jpg</a> <h1>使用服务器端编码的方式实现文件下载</h1>
<a href="/WEB14/downloadServlet?filename=a.txt">a.txt</a>
<br>
<a href="/WEB14/downloadServlet?filename=a.jpg">a.jpg</a>
<br>
<a href="/WEB14/downloadServlet2?filename=你的名字.txt">你的名字</a> </body>
</html>

1.DownloadServlet()代码

package com.hdh.content;

import java.io.FileInputStream;
import java.io.IOException; 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 DownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //1.获取下载文件的名称
String filename=request.getParameter("filename");
//*告诉客户端这个文件不是解析 而是以附件的形式下载
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//2.获取文件的绝对路径
String path=this.getServletContext().getRealPath("download/"+filename);
//3.获得该文件的输入流
FileInputStream in=new FileInputStream(path);
//获得输出流---通过response获得的输出流 用于向客户端写内容
ServletOutputStream out=response.getOutputStream();
//拷贝文件
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);
} }

2.在服务器上运行后出现图片无法下载而是直接解析:

需要不进行解析而是以附件的形式下载:告诉客户端这个文件不是解析 而是以附件的形式下载

加上:response.setHeader("Content-Disposition", "attachment;filename="+filename);

package com.hdh.content;

import java.io.FileInputStream;
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 DownloadServlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 解决下载 你的名字.txt时乱码的问题
*/
//1.获取下载文件的名称
String filename=request.getParameter("filename"); filename=new String(filename.getBytes("ISO8859-1"),"UTF-8");
//*告诉客户端这个文件不是解析 而是以附件的形式下载
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//2.获取文件的绝对路径
String path=this.getServletContext().getRealPath("download/"+filename);
//3.获得该文件的输入流
InputStream in=new FileInputStream(path);
//获得输出流---通过response获得的输出流 用于向客户端写内容
ServletOutputStream out=response.getOutputStream();
//拷贝文件
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);
} }

3.如果在获取中文文件名时,文件名时乱码问题

filename=new String(filename.getBytes("ISO8859-1"),"UTF-8");

最新文章

  1. 计算字符数组长度,用strlen 与 sizeof 的原理与区别
  2. About_MySQL Select--来自copy_03
  3. STL容器删除元素的陷阱
  4. Android Service获取当前位置(GPS+基站)
  5. 记录一些容易忘记的属性 -- NSTimer
  6. 各种语言中的urlencode方法
  7. Android绘图监听接口OnPreDrawListener详解
  8. CURL基础
  9. BestR #31
  10. OS调度算法常用摘要
  11. Swift中文手册 -- The Basics
  12. Java 类的成员初始化顺序
  13. Appium+Python自动化 2 定位元素方式
  14. SpringBoot开源项目Jeeplatform
  15. Removing Timezone from XMLGregorianCalendar
  16. C++(初学讲解):判断倍数
  17. go语言之行--简介与环境搭建
  18. UITableViewCell的separatorInset属性
  19. Shader工具
  20. ie浏览器升级的正确姿势

热门文章

  1. dataframe初始化
  2. numpy数组 拼接
  3. jquery遍历-filter()
  4. “全栈2019”Java第五十一章:继承与final关键字详解
  5. [Flex] 组件Tree系列 —— 将数组作为dataProvider
  6. dataTable 从服务器获取数据源的两种表现形式
  7. JavaScript Debug 之 Console
  8. c++和java在桌面应用软件开发的区别
  9. 数论 CF230B T-primes
  10. 常用sql记录