历史版本32 :文件上传至数据库并下载 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

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

1.2 实现思路

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

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

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

 OLE对象

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

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

注:本文档适用于小文件的上传下载,文件过大会占用过多的数据库表空间,建议使用上传下载文件插件:上传下载文件插件

2. 示例编辑

以下我们通过上传一个 txt 文件至 MySQL 数据库中并下载为例来说明实现过程。

 注:帆软自带的FRDemo数据库为Sqlite 数据库,不支持下载文件。

2.1 数据准备

1)准备一个 txt 文件,如FR使用说明 .txt

2)数据库中创建了一张数据库表 test,包含字段(filename[varchar]、file[Blob])。如图所示:

1601185910302308.png

3)设计好表之后建立报表软件与该数据库的连接,详情参 照JDBC连接数据库

2.2 上传

1)A2单元格插入公式filename(B2)。B2单元格添加文件控件

注:此处也可以不用公式获取文件名,直接在单元格手写文件名,但是一定要将文件名写完整,文件后缀不能丢。后面下载文件时会用到这个文件名,如果不完整下载下来的文件可能是一个无效的乱码文件。

2020-09-25_11-41-07.png

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

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

2020-09-27_17-06-17.png

4)保存模板,点击填报预览。使用B2单元格的控件,选择本地文件即可上传文件,如下图所示:

2020-09-25_13-04-35.gif

5)上传成功后点击提交,即可在数据库中看到数据。如图所示:

2020-09-27_14-28-13.png

2.3 下载

重新设计模板,添加数据库查询 ds1,SQL 语句为select * from test,将保存的数据查询出来

将字段拖入到单元格中,并设置文件字段所在单元格的其他>显示内容用下载链接显示二进制内容,并设置下载文件名」为=A2如下图所示:

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

1601188725297071.png

222

保存模板点击填报预览,会看到文件字段会以超链形式展示,点击超链就可以下载了

image.png

3. 模板下载编辑

已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\上传到数据库并下载.cpt

点击下载模板:上传到数据库并下载.cpt