errors | |
---|---|
|
文件(files)
引擎提供了文件上传/file/upload接口。
如果用到了文件上传功能。需要在apps目录下添加sie-iidp-file-1.0-SNAPSHOT.jar项目包
如果用到excel导入导出功能。也需要在apps目录下添加sie-iidp-file-1.0-SNAPSHOT.jar项目包
#minio
minio.endpoint=http://192.168.175.54:9000
minio.accessKey=snest
minio.secretKey=12345678
minio.bucketName=apps
文件上传接口
请求方式 | POST |
---|---|
请求地址 | /file/upload |
请求参数1 | file |
请求参数2 | userId |
文件预览接口
请求方式 | GET |
---|---|
请求地址 | /file/preview |
请求参数 | id |
文件下载接口
请求方式 | POST/GET |
---|---|
请求地址 | /file/download |
请求参数1 | id |
请求头 | Authorization |
文件上传自定义
请求方式 | POST |
---|---|
请求地址 | /file/uploadForModel |
请求参数1 | model_id |
请求参数2 | user_id |
表格(excel)
1.基础用法模型导入导出
rbac_role继承base_excel模型,拥有了export,Import两个服务。所以只需要配置视图就可以直接访问导入导出功能。如果默认服务不支持你的需求,当然我们也支持自定义导入导出服务,自己编写服务,详情请看高阶用法。
@SDK.Model(name = "rbac_role", type = Buss, displayName = "角色", parent = "base_excel")
public class Role extends Model {
}
1.1 tbar视图配置导出(export)
{
"name": "导出",
"action": "export",
"properties": ["name","code","is_admin","remark"],
"model": "rbac_role",
"service": "export"
}
1.2 tbar视图配置导入(Import)
{
"name":"导入",
"action": "import",
"model": "rbac_role",
"service": "Import",
"fileLimit": {
"ext": ".xls,.xlsx",
"maxSize": "2048"
}
}
2.高阶用法服务自定义
自定义export,Import服务。需要自己定制化导入导出可以重写这两个服务,或者可以自己命名服务名。
@MethodService(description = "Excel导出")
public void export(RecordSet rs, Filter filter, List<String> properties, Integer limit, Integer offset, String order) {
Meta meta = rs.getMeta();
Map<String, List<Map<String, Object>>> datas = new LinkedHashMap<>();
RecordSet rs1 = meta.get(meta.getModelName());
if (Objects.isNull(rs1)) {
throw new ExceException(String.format("文件导出异常,RecordSet %s 空", meta.getModelName()));
}
List<Map<String, Object>> values = rs1.search(filter, properties, limit, offset, order);
ModelMeta modelMeta = rs1.getModel();
if (Objects.isNull(modelMeta)) {
throw new ExceException(String.format("文件导出异常,modelMeta %s 空", meta.getModelName()));
}
List<Map<String, Object>> newValues = new ArrayList<>();
for (Map<String, Object> value : values) {
Map<String, Object> newV = new LinkedHashMap<>();
for (String p : properties) {
PropertyMeta propertyMeta = modelMeta.getProperty(p);
if (!Objects.isNull(propertyMeta)) {
Object v = value.getOrDefault(p, "");
newV.put(propertyMeta.getDisplayName(), v);
}
}
newValues.add(newV);
}
String modelName = StringUtils.isNotBlank(modelMeta.getDisplayName()) ? modelMeta.getDisplayName() : modelMeta.getName();
datas.put(modelName, newValues);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String fileName = modelName + "_" + dateFormat.format(new Date());
String suffix = ".xlsx";
rs.getMeta().get("base_excel").call("fileExport", datas, fileName + suffix);
}
@MethodService(description = "Excel导入")
public boolean Import(RecordSet rs, String fileId) {
Meta meta = rs.getMeta();
RecordSet rs1 = meta.get(meta.getModelName());
if (Objects.isNull(rs1)) {
throw new ExceException(String.format("文件导入异常,RecordSet %s 空", meta.getModelName()));
}
ModelMeta modelMeta = rs1.getModel();
if (Objects.isNull(modelMeta)) {
throw new ExceException(String.format("文件导入异常,modelMeta %s 空", meta.getModelName()));
}
String modelName = StringUtils.isNotBlank(modelMeta.getDisplayName()) ? modelMeta.getDisplayName() : modelMeta.getName();
Map<String, List<Map<String, Object>>> fileMap = (Map<String, List<Map<String, Object>>>) rs.getMeta().get(
"base_excel").call("fileImport", fileId);
List<Map<String, Object>> sheet1 = fileMap.get(modelName);
for (Map<String, Object> s : sheet1) {
Map<String, Object> mV = new LinkedHashMap<>();
for (Map.Entry<String, Object> v : s.entrySet()) {
PropertyMeta propertyMeta = modelMeta.getProperties().stream().filter(p -> p.getDisplayName().equals(v.getKey())).findFirst().orElse(null);
if (!Objects.isNull(propertyMeta)) {
mV.put(propertyMeta.getName(), v.getValue());
}
}
rs.create(mV);
}
return true;
}
自定义excelExport视图文件
{
"name": "导出",
"action": "export",
"properties": ["name","code","is_admin","remark"],
"model": "rbac_role",
"service": "export"
}
自定义excelImport视图文件
{
"name":"导入",
"action": "import",
"model": "rbac_role",
"service": "Import",
"fileLimit": {
"ext": ".xls,.xlsx",
"maxSize": "2048"
}
}
-
名词解释
属性 定义 action 事件用于前端支持按钮类型,import导入按钮,export导出按钮。 service 服务名,就是MethodService标注的方法。 name 中文名称 fileLimit 文件上传限制,文件大小,格式类型。 model 模型名 properties 指定需要导出的属性名
文件(file)后端上传
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream(new File("D:\\gitlab\\sie-snest-dev\\sie-snest-apps\\snest-apps\\mom\\target\\mom-1.0-SNAPSHOT.jar"));
Map<String, Object> upload = (Map<String, Object>) recordSet.getMeta().get("meta_attachment").call("putObject", fileInputStream,"mom-1.0-SNAPSHOT.jar","apps");
System.out.println(upload);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
文件后端上传备注
若上传的文件流来自于URL,那么需要读取并转成ByteArrayInputStream
URLConnection connection = new URL(url).openConnection();
InputStream inputStream = connection.getInputStream();
byte[] bytes = streamToByteArray(inputStream);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
Map<String, Object> upload = (Map<String, Object>) myMeta.get("meta_attachment").call("putObject", byteArrayInputStream, originalFilename, "apps");
public static byte[] streamToByteArray(InputStream in) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int n;
while (-1 != (n = in.read(buffer))) {
output.write(buffer, 0, n);
}
return output.toByteArray();
}
获取文件流
String fileId = "meta_attacment 的 id";
InputStream is = rs.get("base_file").call("getInputStream", fileId);