Java下载项目中静态文件方式
更新时间:2023年08月14日 16:33:44 作者:竹秋千道
这篇文章主要介绍了Java下载项目中静态文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Java下载项目中静态文件
废话不多说,直接上代码,拷贝即可用~~~
项目结构

下载工具类
/**
* @program: myutil
* @description: 从本地项目(本地磁盘上)下载静态文件
* @author: lsy
* @create: 2020-08-13 16:58
**/
public class LocalFileUtils {
/**
* @param response
* @param fileName
* @description 根据指定项目路径下的某个excel, 下载文件
*/
public static void exportFile(HttpServletResponse response, String fileName) {
// 第一种获取静态资源
ClassPathResource classPathResource = new ClassPathResource("static/excleTemplate/" + fileName);// "static/excleTemplate/ImportModel.xlsx"
// 第二种获取静态资源
// InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/excleTemplate/" + fileName);
// 第三种获取静态资源
// InputStream inputStream = this.getClass().getResourceAsStream("static/excleTemplate/" + fileName);
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = classPathResource.getInputStream();
outputStream = response.getOutputStream();
int BUFFER_SIZE = 1024 * 4;
byte[] buffer = new byte[BUFFER_SIZE];
int reader = 0;
while ((reader = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, reader);
}
response.setContentType("application/octet-stream");
response.setCharacterEncoding("utf-8");
String newFileName = URLEncoder.encode(classPathResource.getFilename(), "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + newFileName);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
/**flush():仅仅刷新缓冲区(一般写字符时要用,因为字符时先进入缓冲区),然后将内存中的数据立刻写出(因为缓冲区是装满之后才会写出
,用flush()就不必等到缓冲区满,立刻写出,流对象还可以继续使用) */
outputStream.flush();
/**close():关闭流对象. 也会先刷新一次缓冲区,再关闭. 关闭之后,流对象不可以继续使用 */
outputStream.close();
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}控制器
@ApiOperation(value = "获取resource下附件")
@GetMapping(value = "/exportFile")
public void exportFile(String fileName, HttpServletResponse response) {
// fileName = "ImportModel.xlsx";
fileName = "labixiaoxin.jpg";
LocalFileUtils.exportFile(response, fileName);
}Java把静态资源文件下载到本地
场景
springboot项目中下载resources/static 下面的静态文件(或者本地文件)
@RequestMapping("/doLoad")
public void doLoad(HttpServletRequest request, HttpServletResponse response){
String filename = "×××模版";
try {
// 清空输出流
response.reset();
String resultFileName = filename + ".xlsx";
resultFileName = URLEncoder.encode(resultFileName,"UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
//输入流:文件路径 // 本地路径:E:\\java\\demo\\导入模板.xlsx
DataInputStream in = new DataInputStream(
new FileInputStream(new File("src/main/resources/static/file/导入模版.xlsx")));
//输出流
OutputStream out = response.getOutputStream();
//输出文件
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
// 清空输出流
response.reset();
}
}
效果:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法
这篇文章主要介绍了SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法,文章内容介绍详细需要的小伙伴可以参考一下2022-04-04
SpringBoot整合RedisTemplate实现缓存信息监控的基本操作
SpringBoot中的 redistemplate 是一个用于操作 Redis 数据库的高级模板类,它提供了一组方法,可以方便地执行常见的 Redis 操作,如存储、检索和删除数据,本文给大家介绍了SpringBoot整合RedisTemplate实现缓存信息监控的基本操作,需要的朋友可以参考下2025-02-02
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
这篇文章主要为大家详细介绍了Spring MVC获取参数和自定义参数类型转换器及编码过滤器,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下2023-06-06
Java实现Elasticsearch查询当前索引全部数据的完整代码
这篇文章主要介绍了如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scroll),可以一次性获取满足条件的数据,而不需要限制每页的查询条数大小,这样可以避免因数据量过大而引发的性能问题,需要的朋友可以参考下2025-02-02
阿里资深技术专家:在各阶段中3年经验的java程序员应该具备哪些技术能力
这篇文章主要介绍了阿里资深技术专家:在各阶段中3年经验的java程序员应该具备哪些技术能力,本文给大家列举了一些内容,大家可以根据自己需要有方法的掌握,感兴趣的朋友跟随小编一起看看吧2020-07-07


最新评论