Newer
Older
casic-goods-reptile / casic-web / src / main / java / com / casic / missiles / controller / TemplateController.java
lwh on 29 May 2022 2 KB feat:
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();
        }
    }
}