度量快速开发平台中,可以设置图片字段,为了保证效率,我们可以把图片存放到服务器上的一个文件夹中,平台中只保存一个图片的指针。
实际业务如下:比如平台中的签名图片,每个人可以自己设置,也可以管理人员预先制作好单位所有的签名图片,如果是管理员预先制作好单位所有图片,在每一个人签名中,一个一个去上传维护,那就比较麻烦。如何能批量的把图片拷贝到服务器上,然后以一定规则批量执行以下,系统中就保存好图片的指针呢?
我们可以借助oracle中的java包,来实现读取操作系统目录下的文件,然后按照一定规则插入到oracle指定业务的表中来实现。
实现代码示例:
--创建表保存文件列表信息。 Create Table dirlist( filename varchar2(4000), filesize number, filedate date) ;
--此过程用户访问操作系统目录并读取文件列表. create or replace and compile java sourcenamed DirList as import java.io.*; import java.sql.*; public class DirList { public static void getList(String directory)throws SQLException { File path=new File(directory); String[] fileList=path.list(); String fileName; long fileSize; long fileDate; for (int i=0;i<fileList.length; i++) { fileName=fileList; File fpath=newFile(directory+'/'+fileName); fileSize=fpath.length(); fileDate=fpath.lastModified(); #sql{insert into delit.dirlist(filename,filesize, filedate) values(:fileName,:fileSize,to_date('01/01/1970','mm/dd/yyyy')+:fileDate/(24*60*60*1000))}; } } }
--此过程用于调用和执行JAVA存储过程(DirList) CREATE OR REPLACE PROCEDUREdelit.p_get_dir_list(i_directory IN VARCHAR2) AS LANGUAGE JAVA NAME'DirList.getList(java.lang.String)';
如果执行有错误: --执行p_get_dir_list过程获取数据 --ORA-29532: Java 调用被未捕获的 Java 异常错误终止:java.security.AccessControlException: the Permission Execdelit.p_get_dir_list('D:/OA/Server/FileSystem/DocumentImages/照片'); --用SYS执行: execdbms_java.grant_permission( 'DELIT', 'SYS:java.io.FilePermission','D:\OA\Server\FileSystem\DocumentImages\照片', 'read' ); execdbms_java.grant_permission( 'DELIT', 'SYS:java.io.FilePermission','D:\OA\Server\FileSystem\DocumentImages\照片\*', 'read,write' );
---正式执行。
Execdelit.p_get_dir_list('D:\OA\Server\FileSystem\DocumentImages\照片');
|