Прочитайте внутренние файлы пакета jar после запуска Spring Boot.

Spring Boot

предисловие

Проекты редко кладут внутрь проекта какие-то файлы, которые нужно читать, а кладут их на конкретный файловый сервер (внешний по отношению к системному серверу); достаточно скачать простой файл-шаблон), конфигурационный файл-сервер будет излишним, а эти файлы-шаблоны будет введен в проект для унифицированной упаковки и развертывания;

задний план

Для простого проекта пользователю необходимо загрузить файл в соответствии с определенным форматом для обработки импорта данных, но нет сервера файлов конфигурации или чего-то еще, только файл шаблона может быть помещен в систему для чтения и загрузки; в разработке среда, прямой путь можно прочитать Возьмите его (не упакованный) и обнаружил, что соответствующий файл шаблона не может быть прочитан после публикации, и искал в Интернете решение проблемы.

Решение

Расположение файла шаблона находится в статическом каталоге (получите код файла напрямую)

  • Код среды разработки (доступен для разработки, недоступен для выпуска)
/**
     * 客户信息导入模板下载
     *
     * @return 跳转页面
     */
    @GetMapping("/template_download")
    @RequiresPermissions("customer:template_download")
    public ResponseEntity<Resource> downloadTemplate() throws FileNotFoundException {
        // Spring 自带ResourceUtils路径读取
        //File file = new File("static/模板.xlsx");   // 怎么读取都是失败
        File file = ResourceUtils.getFile("classpath:static/模板.xlsx");
        InputStream inputStream = new FileInputStream(file);
        Resource resource = new InputStreamResource(inputStream);
        try {
            return ResponseEntity.ok()
                    .contentType(MediaType.parseMediaType("application/octet-stream"))
                    .header(HttpHeaders.CONTENT_DISPOSITION,
                            "attachment;fileName=" + URLEncoder.encode("客户模板.xlsx", "utf-8"))
                    .body(resource);
        } catch (UnsupportedEncodingException e) {
            log.error("文件下载异常");
            throw new ExportDataException("文件下载异常");
        }
    }
  • Среда разработки/выпуска (правильное решение)
// import org.springframework.core.io.Resource;
// import org.springframework.core.io.InputStreamResource;
 /**
     * 客户信息导入模板下载
     *
     * @return 跳转页面
     */
    @GetMapping("/template_download")
    @RequiresPermissions("customer:template_download")
    public ResponseEntity<Resource> downloadTemplate() throws FileNotFoundException {
        // 直接工程内部相对路径(must)
        File file = new File("src/main/resources/static/模板.xlsx");
        InputStream inputStream = new FileInputStream(file);
        // 使用CLASSPATH读取文件(路径必须/)
        // File file = new File(this.getClass().getResource("/static/模板.xlsx").toURI());
//        InputStream inputStream = this.getClass().getResourceAsStream("/static/模板.xlsx");

        Resource resource = new InputStreamResource(inputStream);
        try {
            return ResponseEntity.ok()
                    .contentType(MediaType.parseMediaType("application/octet-stream"))
                    .header(HttpHeaders.CONTENT_DISPOSITION,
                            "attachment;fileName=" + URLEncoder.encode("客户模板.xlsx", "utf-8"))
                    .body(resource);
        } catch (UnsupportedEncodingException e) {
            log.error("文件下载异常");
            throw new ExportDataException("文件下载异常");
        }
    }