【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
安装仓库流程:
1、添加仓库的工厂:RepositoryFactoryProvider<T extends UniqueKey>泛型为工厂的配置类,如果没有配置类,工厂的配置管理器RepositoryConfigManagerProvider<T extends UniqueKey>为空。添加工厂后表示已经支持该类型的仓库;
2、安装仓库:安装仓库并不需要主动初始化好仓库,而是提供一个凭据,这个凭据包括了仓库的类型、工作路径、配置对象,然后仓库安装器会根据凭据返回一个安装组件,安装组件的设计是为了可以延迟仓库初始化;
FTPRepositoryProfile.create(FTP_REPO_NAME, bean.getPath(), config).install().apply(); 或者 InstalledComponent<FTPConfig> component = FTPRepositoryProfile.create(FTP_REPO_NAME, bean.getPath(), config).install(); component.apply(); //component.apply(RepositoryApplyPolicy.SELECTABLE);
3、加入服务:安装组件的apply方法可以携带服务策略参数加入服务,加入服务意味着可以使用这个仓库了;
ResourceIOUtils包含了日常文件读写的静态方法,在资源文件模块未启动时,ResourceIOUtils处于孤立模式,此时ResourceIOUtils的读写和本地文件读写没有区别。当资源文件模块启动后,ResourceIOUtils会根据路径识别是否需要到资源仓库读写:
1、使用时,由于实际存储的不确定性,资源仓库并没有完全覆盖WEB-INF下所有的文件读写,只包含reportlets、resources、asserts、plugins、schedule等文件夹,因此直接使用ResourceRepository可能会造成混乱。因此提供了ResourceIOUtils提供屏蔽资源仓库的手动选择。
2、ResourceIOUtils首先会根据传入的路径,根据路径指向的文件夹,选择是否在资源仓库读写。例如,资源文件存储在FTP服务器,而logs、libs等都放在本地,当向一个非资源文件写入时,会调用本地文件系统的FileSystemRepository,当读取一个报表时则会从FTPResourceRepository读。
3、公有方法描述:
方法名称 | 作用描述 | 返回值/参数说明 |
---|---|---|
renameTo | 重命名 | |
close | 关闭流等 | |
copy | 复制 | 源路径和目标路径应该处于同一个存储下 |
createFile | 创建文件 | 若已经存在返回false |
createDirectory | 创建文件夹 | 自动连续创建,没有mkdir和mkdis区别 |
isDirectory | 是否是文件夹 | |
getName | 获取文件或文件夹名称 | |
exist | 文件或文件夹是否存在 | |
list | 列出文件夹下的内容名称 | 返回的是文件名列表 |
listWithFullPath | 列出文件夹下内容的路径 | 返回的是文件的绝对路径列表 |
isDirectoryExist | 文件夹是否存在 | |
read | 读取文件流 | |
readBytes | 读取到byte[] | |
write | 写 | 接受InputStream、byte[]、String类型的数据 |
delete | 删除文件或文件夹 | |
getParent | 获取文件或文件夹父路径 | |
inputStream2String | InputStream转String | |
inputStream2Bytes | InputStream转byte[] | |
readFileFromRepoToLocal | 从资源仓库读取文件到本地 | 若不指定本地文件夹,会自动指定一个 |
readDirFromRepoToLocal | 从资源仓库读取文件夹到本地 | 若不指定本地文件夹,会自动指定一个 |
unzip | 解压 | 压缩文件可以在本地也可以在资源仓库 |
ResourceRepository作为一个通用的资源仓库,并没有规定路径的名称,不仅仅可以读写资源文件,其它存在仓库中的文件同样可以访问。
1、资源仓库必须规定资源工作目录,比如在FTP中,需要一个工作目录,目录下包含./reportlets/、.//resources/、./plugins/、./asserts、./bireport等目录。
2、读写,建议所有文件操作全部使用相对路径(相对WEB-INF路径)
a、如果要访问某个资源文件,如read("/reportlets/xxx.cpt"),会自动将路径拼接成workroot + /reportlets/xxx.cpt;
b、如果要访问某个WEB-INF下的非资源文件,比如finedb/db.properties,会自动转化成workroot+ /finedb/db.properties;
c、如果使用绝对了路径,如/Users/rinoux/FineProjects/finereport-ft/env/WebReport/WEB-INF/reportlets/xxx.cpt,还是会去读绝对路径;
ResourceIOUtils的所有操作方法,均是提供给本地环境使用的,如果设计到远程设计环境,希望在远程设计的客户端,可读读取到服务端的某些资源,需要使用
com.fr.workspace.resource.WorkResource rs = com.fr.workspace.WorkContext.getWorkResource();
在获取到WorkResource对象后,再调用响应的读取文件的方法。