• 下载文件


     1 

      //DownloadServlet.java
    package com.demo; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 public class DownloadServlet extends HttpServlet { 16 @Override 17 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 18 throws ServletException, IOException { 19 // 获取项浏览器输出的对象 20 OutputStream out = resp.getOutputStream(); 21 InputStream in = null; 22 //1- 获得浏览器请求下载的文件名称 23 String fname = req.getParameter("fileName"); 24 //2- 判断文件名是否为空 25 if (fname == null) { 26 //如果为空,则提醒用户输入文件名称 27 out.write("<center><font size='36' color='red'>please input fileName = </font></center>".getBytes()); 28 return; 29 } 30 //3- 文件名不为空,则判断该文件名是否在指定目录中 31 String absPath = this.getServletContext().getRealPath("/WEB-INF/store"); 32 33 File store = new File(absPath); 34 //3-1 得到文件夹中所有文件对象 35 File [] fs = store.listFiles(); 36 //遍历store文件夹中的所有文件夹 37 for (File f : fs) { 38 //判断没个File对象,且文件名称和请求的名称相同 39 if (!(f.isFile() && f.getName().equals(fname))) { 40 //如果不符合,则告诉浏览器,文件没有找到 41 out.write("<center><font size='36' color='red'> file not exist, please revisit </font></center>".getBytes()); 42 out.close(); 43 return; 44 } 45 //4- 满足条件,则获得输入流对象,读取文件 46 47 in = this.getServletContext().getResourceAsStream("/WEB-INF/store/" + fname); 48 //5- 设置正文的MIME类型 49 int length = in.available();//获取正文长度 50 resp.setContentType("application/force-download"); 51 //设置响应正文的长度 52 resp.setHeader("Content-Length",length +""); 53 //Content-Disposition:表示为下载的文件提供一个默认的文件名. 54 resp.setHeader("Content-Disposition", "attachment;fileName=" + fname); 55 //6- 读取并发送文件给浏览器 56 byte[] buffer = new byte[length]; 57 in.read(buffer);//读取 58 59 out.write(buffer);//发送 60 out.close(); 61 in.close(); 62 } 63 64 } 65 }
    1 
      //web.xml中的配置
    <servlet-name>download</servlet-name> 2 <servlet-class>com.demo.DownloadServlet</servlet-class> 3 </servlet> 4 <servlet-mapping> 5 <servlet-name>download</servlet-name> 6 <url-pattern>/download</url-pattern> 7 </servlet-mapping>
  • 相关阅读:
    Nginx知识总结 当幸福来敲门
    JVM 当幸福来敲门
    Redis锁异步线程中使用问题
    使用Mybatis批量插入大量数据的实践
    JdbcType
    Vue和Springboot实现SM4加密和解密(前端可加密,后端可加解密,MD5同理)
    springboot2.x+quartz 实现分布式任务调度
    mpvue 入坑指南
    Vue中使用jssdk
    datax数据迁移所支持的类型及其配置(demo)[txtfilereader]
  • 原文地址:https://www.cnblogs.com/zqq3436/p/5334254.html
Copyright © 2020-2023  润新知