【Servlet】把文件写到Respond输出流里面供用户下载
本文区分于《【Jsp】把Java写到Respond输出流里面供用户下载》(点击打开链接)把原本该打印到控制台的内容,直接打印到一个文本文件txt中给用户下载。
实际上是《【Struts2】中文文件的下载与下载权限的控制》(点击打开链接)不使用三大框架。纯属使用Servlet去实现。怎样把在Tomcat服务端上的文件资源,给用户下载。
例如以下图的JavaEE文件夹结构。在Tomcat上ServletDownloadTestproject的根文件夹有张Chrysanthemum.jpg的图片
可是。用户输入http://localhost:8080/ServletDownloadTest/download.java訪问名为download这个Servlet会出现一个下载图片的下载提示框,例如以下图:
下载之后能够打开。而不是像img标签那样,直接把图片标签显示在网页。
这里是显示非常easy,首先因为使用了Servlet3.0的凝视方式,web.xml里面什么都没有,
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> </web-app>
关键是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");
// 对默认下载的文件名称编码。不编码的结果就是,在client下载时文件名称乱码
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();
}
}
}
【Servlet】把文件写到Respond输出流里面供用户下载的更多相关文章
- PHP 用 ZipArchive 打包指定文件到zip供用户下载
Ubuntu需安装zlib sudo apt-get install ruby sudo apt-get install zlib1g zlib1g.dev Windows需开启php_zip.d ...
- Ajax异步请求返回文件流(eg:导出文件时,直接将导出数据用文件流的形式返回客户端供客户下载)
在异步请求中要返回文件流,不能使用JQuery,因为$.ajax,$.post 不支持返回二进制文件流的类型,可以看到下图,dataType只支持xml,json,script,html这几种格式,没 ...
- 把app(apk和ipa文件)安装包放在服务器上供用户下方法
怎么把app(apk和ipa文件)安装包放在服务器上供用户下载? IIS服务器网站不能下载.apk文件的原因:IIS的默认MIME类型中没有.apk文件,所以无法下载.解决办法:给.apk格式文件添加 ...
- Servlet实现文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip : 点击打开链接 2) commons- ...
- Servlet实现文件上传(简单)(一)
1..使用到的jar包,为apache的一个子项目 此commons-fileupload-1.2.2需要以下commons-io-2.0.1的支持 2.页面展示fileUpload.jsp ...
- servlet实现文件上传,预览,下载和删除
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数 ...
- Servlet实现文件上传,可多文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和 ...
随机推荐
- LeetCode -- 推断链表中是否有环
思路: 使用两个节点.slow和fast,分别行进1步和2步.假设有相交的情况,slow和fast必定相遇:假设没有相交的情况,那么slow或fast必定有一个为null 相遇时有两种可能:1. 仅仅 ...
- js跨域问题(2)
前两天碰到一个跨域问题的处理,使用jsonp可以解决.(http://www.cnblogs.com/xtechnet/p/4123210.html) 最近再整理了一下: 非CORS 1.jsonp. ...
- QQ会员活动运营平台架构设计实践——高效自动化运营
QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.在过去四年的时间里,AMS日请求量从200-500万的阶段,一直增长到日请求3-5亿,最高CGI日请 ...
- 二、thinkphp
## ThinkPHP 3.1.2 查询方式#讲师:赵桐正微博:http://weibo.com/zhaotongzheng 本节课大纲:一.普通查询方式 a.字符串 $arr=$m->wher ...
- UP与瀑布模型
软件开发过程(Software development process)描述了构造.部署以及维护软件的方式.(就是先做什么后做什么)统一过程(The Unified Software Developm ...
- 【BZOJ】3172: [Tjoi2013]单词(后缀自动机)
http://www.lydsy.com/JudgeOnline/problem.php?id=3172 随便搞个sam就行了.(其实一开始看到数据n<=200, 单词长度不超过1e6,然后感觉 ...
- 如何用ChemFinder制作子表单
通过使用ChemFinder这一插件,用户可以建立自己的ChemFinder数据库,数据库是由表单集合而成,所以建立数据库的前提是要制作表单.在之前的教程中已经介绍了制作表单的方法,本节ChemDra ...
- C++关键字之const(整理!)
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- 在ASP.NET MVC 3 中自定义AuthorizeAttribute时需要注意的页面缓存问题
一.ASP.NET MVC中使用OutputCache实现服务器端页面级缓存 在ASP.NET MVC中,假如我们想要将某个页面(即某个Action)缓存在服务器端,可以在Action上标上以下特性: ...
- win7下maven的安装
1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量.2.上Maven官网(https://maven.apache.org/download.cgi)下载Maven的压 ...