报表存储
默认报表存储器
LuckReport 内置默认报表存储器,存储目录由 application-环境.yaml 配置文件中的 luck-report.fileStoreDir 指定,默认为 D:/report。
yaml
luck-report:
# 报表文件存储目录,请根据您的实际存储路径修改,确保该目录存在且有读写权限
fileStoreDir: D:/report自定义报表存储器
LuckReport 支持自定义扩展报表存储器,实现 ReportProvider 接口即可快速接入自定义报表存储方案,适用于需要将报表文件存储到数据库、Minio、FTP 等外部系统的场景。
配置步骤
- 实现接口:创建类实现
com.luck.report.core.provider.report.ReportProvider接口 - 注册 Bean:将实现类注册为 Spring Bean(使用
@Component、@Service等注解) - 实现方法:实现报表的加载、保存、删除、列表获取等核心方法
- 配置前缀:通过
getPrefix()方法返回报表文件名前缀,用于区分不同存储器
接口方法说明
ReportProvider 接口核心方法:
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| loadReport(String file) | InputStream | 根据报表名加载报表文件 |
| saveReport(String file, String content) | void | 保存报表文件 |
| deleteReport(String file) | void | 删除指定的报表文件 |
| getReportFiles() | List<ReportFile> | 获取所有报表文件列表 |
| getName() | String | 返回存储器名称(在设计器中显示) |
| getPrefix() | String | 返回报表文件名前缀(如 local:) |
| disabled() | boolean | 返回是否禁用该存储器 |
配置示例
以下示例实现了本地文件系统报表存储器,将报表文件存储到指定目录:
LocalReportProvider.java
java
package com.luck.report.web.test;
import com.luck.report.core.provider.report.ReportFile;
import com.luck.report.core.provider.report.ReportProvider;
import org.springframework.stereotype.Component;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 本地文件系统报表存储器
* 将报表文件存储到本地指定目录
*/
@Component
public class LocalReportProvider implements ReportProvider {
private String prefix = "local:";
private static final String REPORT_DIR = "E:/local/report";
public LocalReportProvider() {
// 确保目录存在
File dir = new File(REPORT_DIR);
if (!dir.exists()) {
dir.mkdirs();
}
}
/**
* 根据报表名加载报表文件
* @param file 报表名称
* @return 报表文件输入流
*/
@Override
public InputStream loadReport(String file) {
if (file.startsWith(prefix)) {
file = file.substring(prefix.length(), file.length());
}
File reportFile = new File(REPORT_DIR, file);
if (reportFile.exists()) {
try {
return new FileInputStream(reportFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 根据报表名删除指定的报表文件
* @param file 报表名称
*/
@Override
public void deleteReport(String file) {
if (file.startsWith(prefix)) {
file = file.substring(prefix.length(), file.length());
}
File reportFile = new File(REPORT_DIR, file);
if (reportFile.exists()) {
reportFile.delete();
}
}
/**
* 获取所有的报表文件
* @return 报表文件列表
*/
@Override
public List<ReportFile> getReportFiles() {
List<ReportFile> files = new ArrayList<>();
File dir = new File(REPORT_DIR);
File[] listFiles = dir.listFiles();
if (listFiles != null) {
for (File file : listFiles) {
if (file.isFile()) {
ReportFile reportFile = new ReportFile(file.getName(), new Date(file.lastModified()));
files.add(reportFile);
}
}
}
return files;
}
/**
* 保存报表文件
* @param file 报表名称
* @param content 报表的XML内容
*/
@Override
public void saveReport(String file, String content) {
if (file.startsWith(prefix)) {
file = file.substring(prefix.length(), file.length());
}
File reportFile = new File(REPORT_DIR, file);
try (FileWriter writer = new FileWriter(reportFile)) {
writer.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 返回存储器名称(在设计器中显示)
* @return 存储器名称
*/
@Override
public String getName() {
return "本地文件系统";
}
/**
* 返回是否禁用该存储器
* @return 是否禁用
*/
@Override
public boolean disabled() {
return false;
}
/**
* 返回报表文件名前缀
* @return 文件名前缀
*/
@Override
public String getPrefix() {
return prefix;
}
}设计器配置
注册完成后,打开报表设计器可以看到自定义的本地文件系统目录:

禁用默认报表存储器
如果您定义了自己的报表存储器,同时不想使用系统默认的"服务器文件系统"存储器,可以在配置文件中禁用:
yaml
luck-report:
# 禁用默认报表存储器
disableFileProvider: true