【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 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和 ...
随机推荐
- 我们通过一个服务器程序,以研究backlog参数对listen系统调用的影响,运行截图如下
启动服务器程序,服务器程序正在等待客户端的连接 我们使用一次telnet命令就建立一个连接 打开多个终端窗口执行下列命名 #telnet 192.168.255.128 4444多次执行 然后我们执行 ...
- span和img标签对齐
html代码 <li> <span class="left_item">在线</span> <img class="right_ ...
- Ubuntu 11.04 下安装配置 JDK 7
第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...
- markdown 表格宽度调整
先在浏览器中看看 HTML是怎样的: 看起来似乎不错.回到 Markdown 上,在原表格前添加 CSS 代码,类似这样: <style> table th:first-of-type ...
- VMware ESXi vsan.v00卡 停
重装VMware ESXi 6.5,结果在loading vsan.v00文件的时候卡住了,过了几个小时都停留在这个界面.无意间重启使用UEFI 启动,提示某文件校验出错,MD5对不上,重新写入安装镜 ...
- TensorFlow基础笔记(0) 参考资源学习文档
1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...
- 【UVa】Partitioning by Palindromes(dp)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=27&page=sh ...
- ES插件elasticsearch-mapper-attachments 2.3.4及各个版本正确下载地址
ES版本更新那么快,文档链接你也倒是跟上啊, 插件zip包下载,都是error link...难不成是我网络原因? 下载zip页面报错信息: This XML file does not appear ...
- Unity Shaders and Effects Cookbook (3-5) 金属软高光
书上这一节看得我头昏脑胀,数学渣表示自理不能-- 并且也不了解这个效果的实际意义. 先记录下来,后面真正看懂了再来补充具体理论. 通过一张纹理贴图,定义高光的形状,利用到的纹理贴图有三种 这里并非把纹 ...
- 标签中的rel属性的含义
rel与rev属性相同,它们都是属于LinkTypes属性. rel 属性 -- rel属性,描述了当前页面与href所指定文档的关系, rel是relationship(关系)的英文缩写. rev ...