基于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);
}
}
}
朝聞道,夕可眠矣。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?