报表中心缺省提供了一套完整的资源管理体系,但仍然无法满足用户对资源管理各式各样的需求,因此产品提供了自开发资源管理的用法。
第一步:
引入了commons-io-2.8.0.jar、commons-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。