随笔 - 571  文章 - 4  评论 - 253  阅读 - 72万

OAF_文件系列1_实现OAF文件上传和下载MessageFileUpload/MessageDownload(案例)

20150707 Created By BaoXinjian

一、摘要


1. 文件上传

首先建立用于存放附件的临时视图对象(View Object),包含Blob类型的视图属性(View Attribute),建立页面包含messageFileUpload类型的Item,并创建页面的控制器。

 

2. 文件下载

这里要实现的功能是当单击附件链接时,能自动打开附件保存对话框.

 

二、文件上传


1. 创建messageFileUpload空间,其类型为BLOB

 

2. 创建CO实现方法

作用1. 数据保存至VO Blob中

作用2. 将VO中Blob数据保存至server上

复制代码
复制代码
  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);
    
      EmpManageAMImpl empAM = (EmpManageAMImpl) pageContext.getApplicationModule(webBean);

      if ("upload".equals(pageContext.getParameter(EVENT_PARAM))) {
          try {
            EmployeeFilesVOImpl empfilevo = empAM.getEmployeeFilesVO();
            EmployeeFilesVORowImpl empfilerow = (EmployeeFilesVORowImpl) empfilevo.getCurrentRow();
            BlobDomain blob = (BlobDomain) empfilerow.getEmployeeFile();
            InputStream instream = blob.getBinaryStream();
            
            File directory = new File("/u2/VIS/visappl/gavin/files"); 
            if(!directory.exists()) {
              directory.mkdirs();  
            }
            String filename = empfilerow.getFileId().toString()+".txt";
            File file = new File (directory + filename);
            FileOutputStream outstream = new FileOutputStream(file);
            
            int size = blob.getBufferSize();
            byte[] buffer = new byte[size];
            int length = 0;
            while ((length = instream.read(buffer)) != -1) {
              outstream.write(buffer, 0, length);
            }
            
            instream.close();
            outstream.flush();
            outstream.close();
            
            empAM.getOADBTransaction().commit();
          }catch(IOException ex) {
            empAM.getOADBTransaction().rollback();
            ex.printStackTrace();
          } 
      }
    
  }
复制代码
复制代码

 

三、文件下载


1. 创建一个MessageDown类型的空间,其会将附件显示在页面之上

 

2. 创建CO方法,将数据中的Blob数据通过或response保存至本地

复制代码
复制代码
  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);
    
      EmpManageAMImpl empAM = (EmpManageAMImpl) pageContext.getApplicationModule(webBean);
  
      if ("download".equals(pageContext.getParameter(EVENT_PARAM))) {
          try {
            EmployeeFilesVOImpl empfilevo = empAM.getEmployeeFilesVO();
            EmployeeFilesVORowImpl empfilerow = (EmployeeFilesVORowImpl) empfilevo.getCurrentRow();
            BlobDomain blob = (BlobDomain) empfilerow.getEmployeeFile();
            InputStream instream = blob.getBinaryStream();
            
            HttpServletResponse response = (HttpServletResponse) pageContext.getRenderingContext().getServletResponse();
            response.addHeader("Content-Disposition", "attachment;filename="+ "gavin.txt");
            response.setContentType("application/x-msdownload");

            int size = blob.getBufferSize();
            byte[] buffer = new byte[size];
            int length = 0;

            while ((length = instream.read(buffer)) != -1) {
              response.getOutputStream().write(buffer,0,length);
            }
            instream.close();
            response.getOutputStream().flush();
            response.getOutputStream().close();

            empAM.getOADBTransaction().commit();
          }catch(IOException ex) {
            empAM.getOADBTransaction().rollback();
            ex.printStackTrace();
          } 
      }
  }
复制代码
复制代码

 

四、测试上传下载文件


Test1. 文件上传测试

Step1. 将employee.txt上传至服务器上

Step2. 查看上传后,文本文件会分别保存至数据库和服务器上

Step3.1  上传至服务器上

Step3.2  上传至数据库中

Step4. 上传后显示在页面中

 

Test2. 文件下载测试

Step1. 文件下载

Step2. 文件下载后保存至数据库中

 

Thanks and Regards

posted on   东方瀚海  阅读(1075)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

点击右上角即可分享
微信分享提示