用Servlet把文件写到Respond输出流里面供用户下载
发布时间:2020-12-15 03:22:07 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 download.java里面的代码,获取服务端存放文件的真实路径之后,把这个文件先写到缓冲区,再把缓冲区的东西写到respond输出流供用户下载。 import java
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
download.java里面的代码,获取服务端存放文件的真实路径之后,把这个文件先写到缓冲区,再把缓冲区的东西写到respond输出流供用户下载。
import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(name = "download",urlPatterns = { "/download" }) public class download extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { String filePath = this.getServletContext().getRealPath("/");// 获取真实路径 String downloadFilename = "中文是没有问题的.jpg";// 在下载框默认显示的文件名 downloadFilename = URLEncoder.encode(downloadFilename,"UTF-8"); // 对默认下载的文件名编码。不编码的结果就是,在客户端下载时文件名乱码 File file = new File(filePath + File.separator + "Chrysanthemum.jpg"); if (file.exists()) { // 写明要下载的文件的大小 response.setContentLength((int) file.length()); response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename);// 设置在下载框默认显示的文件名 response.setContentType("application/octet-stream");// 指明response的返回对象是文件流 // 读出文件到response // 这里是先需要把要把文件内容先读到缓冲区 // 再把缓冲区的内容写到response的输出流供用户下载 FileInputStream fileInputStream = new FileInputStream(file); BufferedInputStream bufferedInputStream = new BufferedInputStream( fileInputStream); byte[] b = new byte[bufferedInputStream.available()]; bufferedInputStream.read(b); OutputStream outputStream = response.getOutputStream(); outputStream.write(b); // 人走带门 bufferedInputStream.close(); outputStream.flush(); outputStream.close(); } } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |