自开发资源管理

报表中心缺省提供了一套完整的资源管理体系,但仍然无法满足用户对资源管理各式各样的需求,因此产品提供了自开发资源管理的用法。

 

第一步:

引入了common-io-1.1.jarcommon-fileupload-1.3.3.jar

这里要说明的是common-fileupload较低版本的jar存在上传时文件名大写变小写的问题。建议使用较高版本的jar包来避免。

第二步:

在普通JSP页面上提交上载文件:

jsp页面定义<form><input/></form> 标签:

<form action=”集成项目名/reportCenterServlet/upload”>//润乾缺省自带的上载servlet

<input type=”file”/>

</form>

 

对于action中所写的servlet,用户可以自行定义。目前产品使用外部fileupload的方式。

上传的文件在表单提交后会以二进制形式存于内存。

DiskFileItemFactory factory = new DiskFileItemFactory();

factory.setSizeThreshold(5 * 1024); // 最大缓存

factory.setRepository(new File(serverPath));

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setSizeMax(sizeMax * 1024 * 1024);// 文件最大上限

try {

List<FileItem> items=upload.parseRequest(request);//解析所有文件/参数列表

for (FileItem item : items) {

if (!item.isFormField()) {//如果是文件

//书写文件储存位置 file dir and file name

FileOutputStream fout = null;

try {

fout = new FileOutputStream(file);

fout.write(item.get());//获取二进制、写入file

} finally {

if (fout != null) {

fout.close();

}

}

}

}catch(Exception e){

}

报表中心为了方便编辑节点,提供了编辑报表类型的节点时异步上传报表的功能。这是建立在浏览器支持dataFile对象的基础上的。很遗憾的是ie浏览器似乎还没有加入对此的支持,因此在ie上使用异步上传功能可能不成功。如需在其他浏览器上使用可参见如下js代码:

<script>

var formData = new FormData(form);

$.ajax({

data:formData,

type:'post',

url:form.action,

async: false, 

cache: false, 

contentType: false, 

processData: false, 

success:function(callbackstr){

if(callbackstr.indexOf("|||") < 0){

alert("异步上传失败!");

return;

}

alert("异步上传成功!");

var sep = "|||";

var arr = callbackstr.split(sep);//用于刷新文件列表的值和显示值

//…刷新文件列表

… …

}

});

</script>

 

使用我们所述的方式上传文件时,解析文件文件名用到item.getName()方法。这个item对象在ie上传时接收到的文件名是全路径名,因此要对getName()方法获得的字符串进行解析,然后在拼接成我们要的file的路径。详见com.raqsoft.center.console.file.UploadFilesServlet.java

报表中心相关的java源码可以参考[安装根目录]\report\doc\zh目录下的center.zip