栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaWeb响应下载功能实例代码(包含工具类)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb响应下载功能实例代码(包含工具类)

今天通过本文给大家分享是关于javaweb的响应(response)下载

以下是我的Demo:

页面我就粘主要部分的代码

模板下载

当然,现在的项目大家都使用框架,这里我使用的是(SSM),好了,粘代码

@Controller
@RequestMapping("/user")
public class UploadController {
@RequestMapping(value="/courseTab",method=RequestMethod.GET)
  public void courseTab(HttpServletResponse response,HttpServletRequest request) throws IOException{
    String path = request.getSession().getServletContext().getRealPath("/courseTab/课表上传模板.xls");
    DownUtil.downMb(response, path, "课表模板"+DateFormat.formatSimple(new Date()));
}
}

 这里我使用的DownUtil工具类是我自己写的,下来我粘到文章中

package org.cxxy.base.cxsc.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletResponse;

public class DownUtil {
  
  @SuppressWarnings("unused")
  public static int downFile(HttpServletResponse response, String url,
      Integer down, String base, String folderPath) throws IOException {
    // 文件的名称
    String fileName = url.split("/")[1];
    System.out.println(fileName);
    // 文件的后缀
    String last = url.substring(url.lastIndexOf(".") + 1);
    System.out.println(last);
    // 文件路径
    String downFilePath = base + folderPath + fileName;
    Long fileLength = new File(downFilePath).length();// 文件的长度
    if (fileLength != 0) {
      response.reset();
      response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
      try {
 response.setHeader(
     "Content-disposition",
     "attachment; filename="
  + new String(fileName.getBytes("utf-8"),
      "ISO8859-1"));
 response.setHeader("Content-Length", String.valueOf(fileLength));
      } catch (UnsupportedEncodingException e) {
 e.printStackTrace();
      }
      BufferedInputStream bis = null;
      BufferedOutputStream bos = null;
      FileInputStream fis = null;
      try {
 fis = new FileInputStream(downFilePath);
 bis = new BufferedInputStream(fis);
 // 输出流
 bos = new BufferedOutputStream(response.getOutputStream());
 byte[] buff = new byte[2048];
 int bytesread;
 // 写文件
 while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
   bos.write(buff, 0, bytesread);
 }
 // 跳转的路径
 fis.close();
 bis.close();
 bos.close();
      } catch (FileNotFoundException e) {
 System.out.println("File is Not Exsist!");
      }
    } else {
      // 抛异常
      response.getWriter()
   .write("");
      return down;
    }
    down++;
    return down;
  }
  
  @SuppressWarnings("unused")
  public static void downMb(HttpServletResponse response, String path,
      String name) throws IOException {
    Long fileLength = new File(path).length();// 文件的长度
    System.out.println("文件的长度:" + fileLength);
    if (fileLength != 0) {
      response.reset();
      response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
      try {
 response.setHeader(
     "Content-disposition",
     "attachment; filename="
  + new String(name.getBytes("utf-8"),
      "ISO8859-1"));
 response.setHeader("Content-Length", String.valueOf(fileLength));
      } catch (UnsupportedEncodingException e) {
 e.printStackTrace();
      }
      BufferedInputStream bis = null;
      BufferedOutputStream bos = null;
      FileInputStream fis = null;
      try {
 fis = new FileInputStream(path);
 bis = new BufferedInputStream(fis);
 // 输出流
 bos = new BufferedOutputStream(response.getOutputStream());
 byte[] buff = new byte[2048];
 int bytesread;
 // 写文件
 while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
   bos.write(buff, 0, bytesread);
 }
 fis.close();
 bis.close();
 bos.close();
      } catch (FileNotFoundException e) {
 System.out.println("File is Not Exsist!");
      }
    }
  }
}

 下来,我说一下,调用的downMb,我们都知道,在服务器上下载一个文件,

//设置响应头,控制浏览器下载该文件,形参调的是文件的长度
response.setHeader("Content-Length", String.valueOf(fileLength));
 //设置响应类型,设置输出流类型
response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件

 这里我使用的是输出的Excel文件

接下来就是读文件,写文件了,相信学了java基础的都会接触IO吧,这里我就略过

BufferedInputStream bis = null;
BufferedOutputStream bos = null;

这里使用的是缓冲流,因其使用的是浏览器打开文件的下载

下来就是写文件了,写文件也是一贯的套路,先把文件存到buff数据缓冲区,然后将buff的数据输出到浏览器供用户查看

byte[] buff = new byte[2048];
  int bytesread;
  // 写文件
  while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
    bos.write(buff, 0, bytesread);
  }

当读写完文件之后,千万别忘了要关闭文件流(当然,关闭流的顺序也不能变)

fis.close();
bis.close();
bos.close();

以上所述是小编给大家介绍的JavaWeb响应下载实例代码(包含工具类),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/145319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号