☰
Current Page
Main Menu
Home
Home
Editing
11.文件
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
--- title: 文件 date: 2023-09-25 17:31:34 permalink: /pages/07ebd3/ --- # 文件 ## 文件(files) 引擎提供了文件上传/file/upload接口。 如果用到了文件上传功能。需要在apps目录下添加sie-iidp-file-1.0-SNAPSHOT.jar项目包 如果用到excel导入导出功能。也需要在apps目录下添加sie-iidp-file-1.0-SNAPSHOT.jar项目包 ```properties #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两个服务。所以只需要配置视图就可以直接访问导入导出功能。如果默认服务不支持你的需求,当然我们也支持自定义导入导出服务,自己编写服务,详情请看高阶用法。 ```json @SDK.Model(name = "rbac_role", type = Buss, displayName = "角色", parent = "base_excel") public class Role extends Model { } ``` 1.1 tbar视图配置导出(export) ```json { "name": "导出", "action": "export", "properties": ["name","code","is_admin","remark"], "model": "rbac_role", "service": "export" } ``` 1.2 tbar视图配置导入(Import) ```json { "name":"导入", "action": "import", "model": "rbac_role", "service": "Import", "fileLimit": { "ext": ".xls,.xlsx", "maxSize": "2048" } } ``` 2.高阶用法服务自定义 自定义export,Import服务。需要自己定制化导入导出可以重写这两个服务,或者可以自己命名服务名。 ```java @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视图文件 ```json { "name": "导出", "action": "export", "properties": ["name","code","is_admin","remark"], "model": "rbac_role", "service": "export" } ``` 自定义excelImport视图文件 ```json { "name":"导入", "action": "import", "model": "rbac_role", "service": "Import", "fileLimit": { "ext": ".xls,.xlsx", "maxSize": "2048" } } ``` 3. 名词解释 | 属性 | 定义 | | ---------- | ---------------------------------------------------------- | | action | 事件用于前端支持按钮类型,import导入按钮,export导出按钮。 | | service | 服务名,就是MethodService标注的方法。 | | name | 中文名称 | | fileLimit | 文件上传限制,文件大小,格式类型。 | | model | 模型名 | | properties | 指定需要导出的属性名 | 文件(file)后端上传 ```java 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 ```java 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"); ``` ```java 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(); } ``` #### 获取文件流 ```java String fileId = "meta_attacment 的 id"; InputStream is = rs.get("base_file").call("getInputStream", fileId); ```
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel