反馈已提交

网络繁忙

文件上传至数据库并下载

  • 文档创建者:文档助手1
  • 历史版本:40
  • 最近更新:星踪 于 2023-05-04
  • 1. 概述

    1.1 应用场景

    希望直接将 txt、Excel 等小型文件保存在数据库中,并且在报表中将这些文件下载下来。

    1.2 实现思路

    上传:使用「文件控件」上传文件,设置好填报属性,以二进制流保存至数据库字段中(字段类型必须是可以存二进制数据的)

    每种数据库可以存文件的字段类型是不同的,以下列出常用数据库保存二进制数据的字段类型:

    数据库  用于保存二进制数据的字段类型  
      Sql Sever image
      Oracle blob
      MySQL longblob
      Access

     OLE对象

    注:Access需使用ODBC连接,方可实现上传下载

    下载:将二进制数据列拖入模板单元格,设置单元格属性的其他>显示内容用下载链接显示二进制内容,就可以实现下载。

    1.3 注意事项

    1)本文档适用于上传单文件场景,如果在同一条数据中上传多个文件,入库后会出现只保存了一个文件的情况。如有多文件上传需求,可考虑增加uuid字段用于区分同一条数据中的多个文件。

    2)本文档适用于小文件的上传下载,文件过大会占用过多的数据库表空间。如有大文件上传需求,建议使用:上传下载文件插件

    3)设计器自带的FRDemo所使用的sqlite数据库,不支持文件下载。

    4)该方案不支持移动端。

    5)出于安全考虑,需要登录决策平台账号后才可以下载文件


    2. 示例

    2.1 数据准备

    1)在MYSQL数据库中创建一张数据库表文件,包含字段(id[int]、file[longblob]、name[varchar])。如图所示:

    2)新建数据集ds1,从刚才的MYSQL数据库取数,sql语句为:SELECT * FROM `文件`

    2.2 模板设计

    如图设计模板,A2单元格为文本控件,C2单元格为文件控件。

    C2单元格的文件控件需勾选只支持单文件上传」。

    2.3 上传设置

    1)在D2单元格插入公式:=if(left(filename(C2)) = '#', B2, filename(C2))。公式的含义为:当文件控件未上传文件时,直接取数据库中的文件名,否则则使用filename()函数获取上传的文件名。

    2)如果有插入行需求,那么需要选中 D2 单元格,设置「单元格属性>其他>插入行策略」为原值,否则插入的行的公式会失效。

    3)在报表填报属性中添加内置SQL,绑定列和值,如下图所示:

    4)隐藏B列和D列。

    2.4 下载设置

    选中 C2 单元格,设置单元格的其他>显示内容用下载链接显示二进制内容,并设置下载文件名」为=B2如下图所示:

    注:下载文件名处为必填项,不填会下载 txt 或者 zip 包之类的乱码文件下来。

    2.5 效果预览

    保存模板,点击填报预览。在C2单元格可完成文件的上传和下载,并支持重新上传文件覆盖之前保存的文件。如下图所示:

    1.gif

    数据库中保存的数据如图所示:

    3. 模板下载

    附件列表


    主题: 填报应用
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持