1.什么情况下会要文件下载
浏览器不能够直接解析的文件
2.什么情况下需要在服务器端编写文件下载的代码?
一般情况下,浏览器不能解析的代码需要编写文件下载的代码
因为浏览器的不同,像谷歌浏览器可以直接解析文件,ie浏览器不能直接解析文件,因此我们设置代码不让浏览器解析文件,而是下载文件。
新建一个download.html
文章图片
再新建一个Servlet
***public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//取页面的参数用的,当页面的表单参数通过request里面传过来,就可以通过这个方法取出来
String filename = request.getParameter(“file”);
// 要下载的文件类型 MIME response.setContentType(this.getServletContext().getMimeType(filename));
// 告诉浏览器该文件不是直接进行解析,而是以下载的方式
// 在设置进去response中之前,可以先把filaname中的字符串设置一下编码
filename = URLEncoder.encode(filename, “utf-8”);
response.setHeader(“ContentDisposition”,“attachment;
filename=”+filename);
// 通过名字来获取到绝对路径
String path = this.getServletContext().getRealPath("/tempfile/"+filename);
// 获取文件的输入流
System.out.println(path);
InputStream is = new FileInputStream(path);
// 获取输出流,通过response对象获取,用于向客户端写入内容
ServletOutputStream out = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len=is.read(b))!=-1){
// 在读取数据的时候就把数据写出去
out.write(b, 0, len);
}
// 关流
is.close();
out.close();
}***
【如何将服务器的文件下载到本地】在写 这个代码时,出现一点问题,就是中文.txt文件名出现了乱码问题,在网上看了很多博客,看到很多就是用这个方法
filename=new String(filename.getBytes(“iso8859-1”),“utf-8”)
就是将得到的字节用utf-8显示出来,但是没什么用,在谷歌浏览器仍然报乱码
后来在网上看到下面的代码,完美的解决了我的问题
文章图片
就是不用的浏览器针对于解决java下载文件中文文件名乱码问题的方法。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)