jsp实现文件的下载 |
您所在的位置:网站首页 › jsp作品 › jsp实现文件的下载 |
文章目录
一、文件的下载1.1 底层的逻辑(图例)1.2 实例代码1.3 下载文件无法命名为中文解决方法
一、文件的下载
1.1 底层的逻辑(图例)
1.2 实例代码
首先,我们把要下载的文件放到file目录下,这个file目录是webapp的子目录 然后写一个servlet程序如下 package com.hstc.edu; import org.apache.commons.io.IOUtils; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Download extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取下载的文件名 String downloadFile = "1.jpeg"; //2.用ServletContext对象读取下载的内容 ServletContext servletContext = getServletContext(); //获取文件类型 String mimeType = servletContext.getMimeType("/file/"+downloadFile); //这里的/file,/是webapp目录,把预下载的内容放到输入流 InputStream inputStream = servletContext.getResourceAsStream("/file/"+downloadFile); //3.传之前,通过响应头告诉客户端返回的数据类型 resp.setContentType(mimeType); System.out.println("下载的类型:"+mimeType); //4.告诉客户端收到的数据是用于下载使用(还是使用响应头) //Content-Disposition 响应头,表示收到的数据要怎么处理 //attachment 表示附件,表示下载使用 //filename=文件名 表示指定下载的文件名(这里的文件名是用户接收到的文件名,也可以任意取) resp.setHeader("Content-Disposition","attachment; filename="+downloadFile); //5.把下载的内容传给客户端 //获取响应的输出流 OutputStream outputStream = resp.getOutputStream(); //读取输入流中的数据并复制给输出流,输出流把数据给客户端 IOUtils.copy(inputStream,outputStream); } }然后我们在web.xml注册该servlet Download com.hstc.edu.Download Download /download之后进入该servlet可以看到下载成功: 注意:上面那段代码不可以下载dog.jpeg文件(会报服务器500错误,貌似只能下载数字名称的文件),也不能把文件名命名为中文(会无法显示中文)。 比如,让客户端下载的时候显示 猫.jpeg,那么会是这种结果。(下面有解决的方法) 1.3 下载文件无法命名为中文解决方法把上面的代码改为: 想复制的请在下方领取(这里的URLEncoder导入的是import java.net.URLEncoder;)。 resp.setHeader("Content-Disposition","attachment; filename="+ URLEncoder.encode("猫.jpeg","UTF-8"));此时,就可以成功下载中文名的文件啦。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |