Java I/O实现OAF文件上传与下载

2014-11-24 02:33:28 · 作者: · 浏览: 0

文件上传
   首先建立用于存放附件的临时视图对象(View Object),包含Blob类型的视图属性(View Attribute),建立页面包含messageFileUpload类型的Item,并创建页面的控制器。
   在控制器的processFormRequest中编写以下代码:
   try
   {
   OAViewObject vo = (OAViewObject)am.findViewObject("FileVO1");
   Row row = vo.getCurrentRow();
  
   String filePath = "/u01/demo10/demo10comn/temp/";
  
   BlobDomain blob = (BlobDomain)row.getAttribute("FileData");
   File f = new File(filePath + (String)row.getAttribute("FileName"));
   InputStream is = blob.getBinaryStream();
   FileOutputStream fos = new FileOutputStream(f);
  
   int size=blob.getBufferSize();
   byte[] buffer=new byte[size];
   int len;
  
   while((len=is.read(buffer)) != -1)
   {
   fos.write(buffer,0,len);
   }
   is.close();
   fos.flush();
   fos.close();
   }
   catch(IOException ex)
   {
   ex.printStackTrace();
   System.out.println(ex.getMessage());
   }
  
   文件下载
   这里要实现的功能是当单击附件链接时,能自动打开附件保存对话框,代码如下:
   try
   {
   OAViewObject vo = (OAViewObject)am.findViewObject("FileVO1");
   Row row = vo.getCurrentRow();
  
   BlobDomain blob = (BlobDomain)row.getAttribute("FileData");
   HttpServletResponse response = (HttpServletResponse)pageContext.getRenderingContext().getServletResponse();
   response.addHeader("Content-Disposition", "attachment;filename="+ (String)row.getAttribute("FileName"));
   response.setContentType("application/x-msdownload");
  
   InputStream is = blob.getBinaryStream();
   int size=blob.getBufferSize();
   byte[] buffer=new byte[size];
   int len;
  
   while((len=is.read(buffer)) != -1)
   {
   response.getOutputStream().write(buffer,0,len);
   }
   is.close();
   response.getOutputStream().flush();
   response.getOutputStream().close();
   }
   catch(IOException ex)
   {
   ex.printStackTrace();
   System.out.println(ex.getMessage());
   }

作者“红豆加奶”