@GetMapping(value = "/downloadTemplate") public void downloadTemplate(HttpServletRequest request, HttpServletResponse response) throws Exception { String templatePath = "template/aaa.xlsx"; String fileName = "凍結名單模板" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xlsx"; fileName = new String((fileName).getBytes(), "ISO-8859-1"); // 清除buffer緩存 response.reset(); response.setContentType("content-type:octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); //文件路徑 ClassPathResource cpr = new ClassPathResource(templatePath); BufferedInputStream inputStream = new BufferedInputStream(cpr.getInputStream()); ServletOutputStream out = response.getOutputStream(); int b = 0; byte[] buffer = new byte[1024]; while ((b = inputStream.read(buffer)) != -1) { //寫到輸出流(out)中 out.write(buffer, 0, b); } inputStream.close(); if (out != null) { out.flush(); out.close(); } }
springboot打成jar包時,可能會下載失敗
在pom文件增加xlsx和xls配置
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>default-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>target/classes</outputDirectory> <useDefaultDelimiters>false</useDefaultDelimiters> <delimiters> <delimiter>@</delimiter> </delimiters> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources/</directory> <filtering>true</filtering> <excludes> <exclude>**/*.xlsx</exclude> <exclude>**/*.xls</exclude> </excludes> <includes> <include>**/*.yml</include> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources/</directory> <filtering>false</filtering> <includes> <include>**/*.xlsx</include> <include>**/*.xls</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin>