文件上传与下载权限的控制
2017-08-07 01:40
519 查看
本文区分于《【Jsp】把Java写到Respond输出流里面供用户下载》(点击打开链接)把原本该打印到控制台的内容,直接打印到一个文本文件txt中给用户下载。
实际上是《【Struts2】中文文件的下载与下载权限的控制》(点击打开链接)不使用三大框架,纯属使用Servlet去实现,如何把在Tomcat服务端上的文件资源,给用户下载。
如下图的JavaEE目录结构,在Tomcat上ServletDownloadTest工程的根目录有张Chrysanthemum.jpg的图片
但是,用户输入http://localhost:8080/ServletDownloadTest/download.java访问名为download这个Servlet会出现一个下载图片的下载提示框,如下图:
下载之后可以打开,而不是像img标签那样,直接把图片标签显示在网页。
这里是显示很简单,首先由于使用了Servlet3.0的注释方式,web.xml里面什么都没有,
[html] view plain copy print?<?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>
[java] view plain copy print?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();
}
}
}
实际上是《【Struts2】中文文件的下载与下载权限的控制》(点击打开链接)不使用三大框架,纯属使用Servlet去实现,如何把在Tomcat服务端上的文件资源,给用户下载。
如下图的JavaEE目录结构,在Tomcat上ServletDownloadTest工程的根目录有张Chrysanthemum.jpg的图片
但是,用户输入http://localhost:8080/ServletDownloadTest/download.java访问名为download这个Servlet会出现一个下载图片的下载提示框,如下图:
下载之后可以打开,而不是像img标签那样,直接把图片标签显示在网页。
这里是显示很简单,首先由于使用了Servlet3.0的注释方式,web.xml里面什么都没有,
[html] view plain copy print?<?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>
<?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输出流供用户下载。
[java] view plain copy print?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();
}
}
}
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 nginx用x-sendfile控制文件下载权限
- Struts 2控制文件上传和下载
- python使用paramiko和SCPClient进行linux远程控制和上传和下载文件
- asp.net如何控制文件下载的权限?
- 文件下载的权限控制(asp.net)
- struts2控制文件上传和下载
- 使用struts2进行文件下载以及下载权限控制的例子
- 使用struts2进行文件下载以及下载权限控制的例子
- 实现IHttpHandler接口来控制文件下载权限
- [已上传demo]使用HttpHandler做文件过滤器,验证下载文件权限
- Struts2 控制文件上传下载
- Python-Selenium2做Web自动化测试(12)-上传文件、下载文件、调用 JavaScript、控制浏览器滚动条
- .NET MVC 通过权限控制文件的下载
- 文件下载的权限控制(asp.net)
- Struts2 控制文件上传下载功能实例代码
- secureCRT 远程控制linux系统 上传下载文件
- 文件下载权限控制机制
- 文件下载的权限控制(asp.net)
- 【Struts2】中文文件的下载与下载权限的控制
- 静态文件下载权限控制机制