PageOffice 开发者中心 PageOffice 开发者中心
首页
文档
  • 后端Java手册 (opens new window)
  • 后端.netcore手册 (opens new window)
  • 前端JavaScript手册 (opens new window)
下载
购买 (opens new window)
首页
文档
  • 后端Java手册 (opens new window)
  • 后端.netcore手册 (opens new window)
  • 前端JavaScript手册 (opens new window)
下载
购买 (opens new window)
  • 开始

  • 通用控制

    • PageOffice最简单的打开保存文件
    • 磁盘路径打开文档
    • 修改标题栏文本内容
    • 自定义工具条上添加按钮
    • 隐藏标题栏
    • 隐藏Office工具栏
    • 隐藏自定义工具栏
    • 禁止保存
    • 禁止另存为
    • 禁止打印
    • 保存后给前台返回自定义结果
    • 给SaveFilePage指向的地址传参
    • 给SaveFilePage指向的地址传参(Vue)
    • SaveFilePage获取页面Form域
    • POBrowser回调父页面的函数传值
    • 给POBrowser打开的页面传参
    • 另存文件为HTML格式
    • 另存文件为PDF格式
    • 保存数据区域数据同时保存文档
    • 文档打开后触发的事件
    • POBrowser窗口关闭前触发的事件
    • 打开保存数据库中的文件
      • WebCreateNew新建文件
      • 控制POBrowser窗口的位置
      • 打开云对象存储上的文档
      • PageOffice控件铺满整个页面
      • 加盖印章和签字功能
      • Office文档在线预览方案
      • 弹出各种样式的消息框及菜单
      • 实现POBrowser窗口内切换打开不同文件
    • Word

    • Excel

    • PDF

    • FileMaker

    • PPT

    • 更多

    目录

    打开保存数据库中的文件

    # 打开保存数据库中的文件

    注意

    本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

    在某些项目中,数据库的文档表中使用了二进制流字段(blob)来保存Office文档,PageOffice也是可以支持在线打开此类二进制流文件的。

    首先,编写一个下载文件的后台方法,比如:openStream;

    然后,把此openStream方法的url地址传递给PageOfficeCtrl对象的webOpen的第一个参数即可打开;

    最后,保存文件时,调用FileSaver对象的getFileBytes()或getFileStream()获取到文件二进制流并保存到数据库中。

    # 后端代码

    1. 编写下载文件的后台方法:openStream;
      @RequestMapping(value = "openStream", method = RequestMethod.GET)
      public void openStream(HttpServletRequest request, HttpServletResponse response) 
                                throws SQLException, ClassNotFoundException, IOException {
      
          String id = request.getParameter("id");
      
          Class.forName("org.sqlite.JDBC");
      
          String strUrl = "jdbc:sqlite:" + ResourceUtils.getURL("classpath:").getPath() 
                            + "static/demodata/DataBase.db";
          Connection conn = DriverManager.getConnection(strUrl);
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery("select * from stream where id = " + id);
      
          if (rs.next()) {
              //******读取数据库中文件流 开始*******************************
              byte[] imageBytes = rs.getBytes("Word");
              int fileSize = imageBytes.length;
      
              response.reset();
              // application/msword, application/x-excel, application/ms-powerpoint, application/pdf
              response.setContentType("application/msword"); 
              response.setHeader("Content-Disposition",
                      "attachment; filename=down.doc"); //fileN应该是编码后的(utf-8)
              response.setContentLength(fileSize);
      
              OutputStream outputStream = response.getOutputStream();
              outputStream.write(imageBytes);
      
              outputStream.flush();
              outputStream.close();
              outputStream = null;
              //******读取数据库中文件流 结束*******************************
          }
          rs.close();
          conn.close();
      }
      
      public void openStream()
      {
          string docID = Request.Query["id"];
          string sql = "Select Word,ID  from stream where ID='" + docID + "'";
          using (SQLiteConnection conn = new SQLiteConnection(connString))
          {
              conn.Open();
      
              using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
              {
                  cmd.ExecuteNonQuery();
                  SQLiteDataReader dr = cmd.ExecuteReader();
                  while (dr.Read())
                  {
                      long num = dr.GetBytes(0, 0, null, 0, Int32.MaxValue);
                      Byte[] b = new Byte[num];
                      dr.GetBytes(0, 0, b, 0, b.Length);
                      //其他文件格式换成相应类型即可 application/x-excel, application/ms-powerpoint, application/pdf 
                      Response.ContentType = "Application/msword"; 
                      //其他文件格式换成相应类型的filename
                      Response.Headers.Add("Content-Disposition", "attachment; filename=down.doc");
                      Response.Headers.Add("Content-Length", num.ToString());
                      Response.Body.WriteAsync(b);
                  }
              }
          }
      
          Response.Body.Close();
      }
      
      // Make sure to add code blocks to your code group
      1. 在后端编写代码调用webOpen方法打开文件之前给SaveFilePage属性赋值(设置好保存时由哪个地址接口负责接收处理控件上传的文件流);
        PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
        poCtrl.setSaveFilePage("saveStream?id=123"); // 设置保存文件的接口地址
        //webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
        //查看详细,请在本站搜索“PageOffice属性或方法中涉及到的URL路径或磁盘路径的说明”
        poCtrl.webOpen("openStream?id=123", OpenModeType.docNormalEdit, "张佚名"); // 打开文件
        
        PageOfficeNetCore.PageOfficeCtrl poCtrl = new PageOfficeNetCore.PageOfficeCtrl(Request);
        poCtrl.SaveFilePage = "saveStream?id=1";//设置保存文件的接口地址
        poCtrl.WebOpen("openStream?id=1", PageOfficeNetCore.OpenModeType.docNormalEdit, "tom");
        
        // Make sure to add code blocks to your code group

        注意

        对PageOfficeCtrl对象的所有属性赋值或函数调用都必须在WebOpen方法调用之前执行,否则会不生效。

        1. 在SaveFilePage属性指向的地址接口saveStream中,创建FileSaver对象处理文件的保存工作。
          @RequestMapping("saveStream")
          public void saveStream(HttpServletRequest request, HttpServletResponse response) 
                                throws ClassNotFoundException, FileNotFoundException, SQLException {
              FileSaver fs = new FileSaver(request, response);
          
              String id = request.getParameter("id").trim();
              Class.forName("org.sqlite.JDBC");
              String strUrl = "jdbc:sqlite:" 
                           + ResourceUtils.getURL("classpath:").getPath() + "static/demodata/DataBase.db";
          
              Connection conn = DriverManager.getConnection(strUrl);
              String sql = "UPDATE  Stream SET Word=?  where ID=" + id;
              PreparedStatement pstmt = null;
              pstmt = conn.prepareStatement(sql);
              pstmt.setBytes(1, fs.getFileBytes());
              //pstmt.setBinaryStream(1, fs.getFileStream(),fs.getFileSize());
              pstmt.executeUpdate();
              pstmt.close();
              conn.close();
          
              fs.close();
          }
          
          public async Task<ActionResult> saveStream()
          {
              PageOfficeNetCore.FileSaver fs = new PageOfficeNetCore.FileSaver(Request, Response);
              await fs.LoadAsync();
          
              string sID = Request.Query["id"];
              string sql = "UPDATE  Stream SET Word=@file WHERE ID=" + sID;
          
              using (SQLiteConnection conn = new SQLiteConnection(connString))
              {
                  conn.Open();
                  byte[] aa = fs.FileBytes;
          
                  using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                  {
                      SQLiteParameter parameter = new SQLiteParameter("@file", System.Data.DbType.Binary);
                      parameter.Value = aa;
                      cmd.Parameters.Add(parameter);
                      cmd.ExecuteNonQuery();
                  }
              }
              return fs.Close();
          }
          
          // Make sure to add code blocks to your code group

          # 前端代码

          本示例无前端关键代码。

          上次更新: 2025/07/21, 15:21:36
          PageOffice | Copyright © 2013-2026 卓正软件 京ICP备12010902号-2 京公网安备 11010502019270号
          • 跟随系统
          • 浅色模式
          • 深色模式
          • 阅读模式