springMVC下载文件前修改文件名字
很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了。
但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名字和下载到本地文件的名字是不一样的。
而在springMVC中怎么实现呢?
下面就是代码部分
/** * 下载文件 * @author xx * */ @Controller @RequestMapping("downloadFile") @Scope(value="prototype") public class DownloadController { /** * 下载文件 * @param path 下载文件的路径 * @param name 下载文件的名字,需要包含后缀名 * @return 下载文件的字节数组 */ @RequestMapping("download") public ResponseEntity<byte[]> download(String path,String name, HttpServletRequest request){ //设置http协议头部 HttpHeaders headers = new HttpHeaders(); //设置文件名 String fileName = ""; try { fileName = new String(name.getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //头部设置文件类型 headers.setContentDispositionFormData("attachment", fileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); //获取文件路径 String targetDirectory = request.getServletContext().getRealPath("/") + path; File file=new File(targetDirectory); //返回文件字节数组 try { return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED); } catch (IOException e) { e.printStackTrace(); return null; } } }
前端用get或者post均可,可以根据自己的情况来,还有需要修改的是,代码中获取文件路径的地方,有的项目是有文件服务器的,所以这个地方不能这么写,还有的项目数据库保存的可能路径不一样,反正需要根据自己的实际情况来修改,如果文件不存在就会报错的。
window.location.href = "/downloadFile/download?path=" + imgURL + "&name=" + documentName + "." + documentType;
需要注意的是,需要判断文件在服务器上面是否存在,在代码中我没写实现,但是实际情况需要判断的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?