package com.casic.missiles.controller; import com.casic.missiles.core.base.controller.BaseController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * 模板管理包 * * @author dev123 * @Date 2018-11-19 13:15:14 */ @RestController public class TemplateController extends BaseController { private static Logger logger = LoggerFactory.getLogger(TemplateController.class); /** * 文件模板下载 (待优化) */ @GetMapping("/template/download") public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) throws ServletException, IOException { String path = ResourceUtils.getURL("classpath:").getPath()+"template/"; logger.info(path); if (path.startsWith("/")) { path = path.substring(1); } File file = new File(path, filename); // 获取文件名 String fileName = null; if (filename.contains("/")) { fileName = filename.substring(filename.lastIndexOf("/") + 1); } else { fileName = filename; } // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", " attachment;filename=" + fileName); response.setContentLength((int) file.length()); FileInputStream fis = null; try { fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int readTmp = 0; while ((readTmp = fis.read(buffer)) != -1) { response.getOutputStream().write(buffer, 0, readTmp); } } catch (Exception e) { logger.info(e.getMessage()); e.printStackTrace(); } finally { response.getOutputStream().flush(); response.getOutputStream().close(); fis.close(); } } }