基于java实现文件下载,文件来源于代码包中

package com.research.business.controller;

import com.research.common.annotation.Anonymous;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

/**
* @author zjl91
* @description 模板下载
* @param[1] null
* @time 2024/4/12 11:09
*/

@Anonymous
@RestController
@RequestMapping("/template")
public class TemplateDownloadController {

private static final Logger log = LoggerFactory.getLogger(FileDownloadController.class);

@GetMapping("/download")
public void downloadTemplate(HttpServletResponse response) {

try {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("/template/template.xlsx");
Resource resource = resources[0];
//设置Headers
response.setHeader("Content-Type", "application/octet-stream");
//设置下载的文件的名称-该方式已解决中文乱码问题
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("评价关系导入模板.xlsx", StandardCharsets.UTF_8.toString()));
try (InputStream inputStream = resource.getInputStream();
OutputStream outputStream = response.getOutputStream()) {

// 将输入流的数据写入响应的输出流
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
} catch (IOException e) {
log.error("评价关系导入模板不存在,请检查!");
throw new RuntimeException(e);
}
}

}
posted @   尋道のJava世界  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示