自开发资源管理

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

 

第一步:

引入了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