今天碰到一個坑 前端調用下載Excel模板接口時,下載文件成功,但是文件被損壞。
先上代碼~
@Api(tags ="xx")
@RestController
@RequestMapping("/excelRead")
@Slf4j
public class NewExcelUtil {
@ResponseBody
? ? @RequestMapping(value ="/readExcel", method = RequestMethod.GET)
public void downloadExcel(HttpServletRequest request, HttpServletResponse response){
try {
InputStream inputStream = (InputStream)this.getClass().getClassLoader().getResourceAsStream("template/xx.xlsx");
String path =this.getClass().getClassLoader().getResourceAsStream("template/xx.xlsx").toString();
response.setContentType("application/zip");
OutputStream out = response.getOutputStream();
response.setHeader("Content-Disposition","attachment; filename=" + java.net.URLEncoder.encode("xx","UTF-8") +".xlsx");
int b =0;
byte[] buffer =new byte[1024];
while (b != -1) {
b = inputStream.read(buffer);
if (b != -1) out.write(buffer,0, b);
}
inputStream.close();
out.close();
out.flush();
}catch (IOException e) {
e.printStackTrace();
log.error("模板下載失敗");
}
}
}
解決:pom文件加上下面這段,解決
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>2.6</version>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
原因:
原因就是springboot的resource目錄下的文件是默認自動壓縮的,所有直接下載打開會出錯。
這個插件可以避免xlsx文件在resource目錄下被自動壓縮,這樣就可以正常下載,打開了