当前位置: 首页 > news >正文

java 下载 docx文件_java 写个controller下载文件(word);两种方式

java 读取某路径下的文件直接相应到前端页面!

前端请求方式为get请求,只需要写个个按标签点击即可下载

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.harry.dandelion.framework.common.utils.StringUtil;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import com.sinosoft.ssi.base.entity.ReportEntity;

import com.sinosoft.ssi.base.mappers.ReportMapper;

import lombok.extern.slf4j.Slf4j;

@Slf4j

@RestController

public class ReportOutWord {

@Autowired

private ReportMapper RrportMapper;

@GetMapping("/exp/outWord/1")

public void download(HttpServletRequest request, HttpServletResponse response) {

String path= " ";

// 开始下载文件

try {

// path是指欲下载的文件的路径。

File file = new File(path);

// 取得文件名。

String filename = file.getName();

// 取得文件的后缀名。

String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

log.debug("下载文件类型为:" + ext);

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream( new FileInputStream(path));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

// 设置response的Header //ISO-8859-1可以显示中文的文件名

response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO-8859-1"));

response.addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

toClient.close();

// 删除临时文件

//FileUtils.delFile(rootPath + File.separator + filename);

// TODO Auto-generated catch block

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

方式二:

// 开始下载文件

InputStream in = null;

try {

// 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型

response.setContentType("multipart/form-data");

// 2.设置文件头:最后一个参数是设置下载文件名

response.addHeader("Content-Disposition",

"attachment;filename=" + new String("*******.docx".getBytes(), "ISO-8859-1"));

in = new FileInputStream(new File(文件路径));

// 3.通过response获取ServletOutputStream对象(out)

int b = 0;

byte[] buffer = new byte[512];

while (b != -1) {

b = in.read(buffer);

if (b != -1) {

response.getOutputStream().write(buffer, 0, b);// 4.写到输出流(out)中

}

}

} catch (Exception e) {

} finally {

try {

if (in != null) {

in.close();

}

response.getOutputStream().flush();

} catch (IOException e) {

e.printStackTrace();

}

}

相关文章:

  • javascript java难度_javascript比java难吗?
  • java map cache_java Map实现的cache manager
  • java中的链表类_6.JAVA-链表实例
  • java 二分查找 简书_二分查找的三种模板(C++,Java,Python)
  • 用java实现矩阵链乘积_矩阵最优链乘及Java实现
  • java泛型 语法_Java泛型中的? super T语法
  • java 模块化 组件化_关于模块化、组件化的理解
  • java isnull方法_Java 检查判断变量null(空值)的方法示例代码
  • java容器类的实现_java容器类总结——基于JDK1.8
  • MySQL实验7存储过程_存储过程 · MySQL5.7文档 · 看云
  • php mysql insert 默认_PHP MySQL Insert Into
  • 称重机 java_Java实现称重3次找到假球
  • triangle java_LeetCode Triangle Java版本
  • python用户重复输入_在Python中从用户输入中查找重复值
  • java类与类之间的类图_UML类图(Class Diagram)中类与类之间的关系及表示方式(转)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [笔记] php常见简单功能及函数
  • 5、React组件事件详解
  • es的写入过程
  • HTTP中GET与POST的区别 99%的错误认识
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JDK 6和JDK 7中的substring()方法
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React-Native - 收藏集 - 掘金
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 精彩代码 vue.js
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 强力优化Rancher k8s中国区的使用体验
  • 巧用 TypeScript (一)
  • 入手阿里云新服务器的部署NODE
  • 1.Ext JS 建立web开发工程
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 阿里云API、SDK和CLI应用实践方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (1)Android开发优化---------UI优化
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)c52学习之旅-简单了解单片机
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十八)三元表达式和列表解析
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)C#调用WebService 基础
  • (转)jdk与jre的区别
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core跨平台微服务学习资源
  • .NET Framework杂记