---
order: 19
navTitle: 上传附件
---
# 上传附件

系统支持上传附件的功能，可以上传图片、音频、视频、文档等多种类型的文件。上传的文件可以以二进制的形式存在数据库中，也可以只在数据库中存储路径，而文件内容存储在磁盘文件系统。

## 使用上传附件组件{#start}

**上传附件**组件在提交数据时，需要设置附件存储的模型表，绑定提交字段，并和按钮组件搭配使用。上传图片组件和上传附件组件的功能类似，区别在于上传图片组件只能上传图片类型的文件。

![上传附件](./images/upload.gif)

[示例地址：list列表-增删改查-新增](https://demo.succbi.com/v5/DEMO/app/ap.app?id=列表)

操作步骤：

1. **拖入上传附件组件**：在**组件区**>**输入分组**下将上传附件组件拖入到画布中，并在**组件栏**>**标题**中设置标题为`企业信息附件`
2. **选择数据集**：在**组件**>**数据**>**数据集**里下拉选择用于存储附件的数据表`企业基本信息_附件`，并绑定需要提交数据的字段，系统可以自动记录额外的一些附件相关信息，例如`文件大小`，`文件名`等。具体可参考[上传附件数据存储](#dataStorage)
3. **设置提交数据**：勾选**提交数据**，可以限制上传附件大小、个数、类型等，可参考[上传附件限制设置](#limit)
4. **设置更多提交字段**：数据集中只存储了附件相关的字段，当需要记录一些系统字段，如`上传用户`等信息时，可以在**更多字段设置**中添加，点击加号按钮添加2个提交字段
   - **上传用户**：目标字段选择`上传用户`，值输入表达式`$user.id`，[$user.id](../../../../exp/var/$user.md)函数用于获取当前用户id
   - **企业内部序号**：目标字段选择`企业内部序号`，值选择参数栏的`企业内部序号`，或写表达式`[企业内部序号]`
5. **设置提交数据交互**：可参考[提交表单](../../design/action/set-component-property.md)交互

### 存储方式{#store}

系统提供了2种附件的存储方式：

- **磁盘存储**：当**文件内容**绑定的提交字段为**字符字段**时，上传的附件会存储在磁盘中，路径格式及场景说明参考[文件存储类型](../../../../data-gov/model/field-role.md#file)
- **数据库存储**：当**文件内容**绑定的提交字段为**blob字段**时，上传的附件会以二进制形式存储在数据库中

:::tip

无论哪种存储模式，均需要将**文件内容**属性绑定的字段设置为[附件角色](../../../../data-gov/model/field-role.md)。当上传文件后，还未点击提交按钮之前，数据是还未提交到数据库中的，这时数据是临时存储在服务器的`workdir/clusters-share/upload-files`目录下，且`upload-files`文件夹存储的临时文件会定期自动删除。

:::

### 设置附件多对一业务关联{#object-relational-mapping}

一个表单中可能会同时上传多个附件信息，例如企业信息的填报，会传多个企业的附件图片信息。

此时附件的数据是单独一个模型表存储的，在附件存储的模型表中，需要有一个外键存储企业信息模型的主键，在模型表上根据企业主键对附件表进行过滤。从而可以实现企业信息下总是只能显示该企业上传的附件信息，并且可以对这些附件进行增加、删除等操作

外键的设置需要单独在**上传附件**>**提交数据**>**更多字段设置**中增加，在这里设置的字段会存储到数据集设置的模型表中：

- **目标字段**：数据存储的目标字段，类似提交数据的绑定字段
- **值类型**：表达式
- **值**：提交到数据库的值，可以为固定值，也可以为参数值或控件参数值

除了外键信息，还可以增加额外的其它信息，如`上传用户`、`上传时间`等信息。

## 属性介绍{#properties}

### 上传附件数据存储{#dataStorage}

设置存储附件的数据表，附件组件可以同时上传多个附件，且会有附件的一些附加属性。所以用于存储附件的表是一个单独的模型表，在数据集中选择存储的模型即可，该下拉框选项是在数据中引入的数据模型。提供了如下属性设置：

- **附件ID**：当上传多个附件时，该属性为必填项，用于存储上传附件的主键，这个字段的数据是系统自动生成的唯一标识。当上传单个附件时，若表单界面已经设置了附件的主键输入信息，**附件ID**可以不填。
- **文件名**：选填，存储附件的文件名称，系统会获取上传的文件名称存储到该字段中。点击下载附件时，下载的附件名称也是该属性设置的值
- **文件大小**：选填，存储附件的大小，若指定了存储字段，系统会获取上传的附件大小并写入到该字段中
- **修改时间**：选填，存储该附件的最后修改时间
- **文件内容**：必填项，用于存储附件里的文件内容。文件内容的存储方式由字段类型决定，可参考[存储方式](#store)

### 上传附件限制设置{#limit}

当附件勾选了提交数据时，可以对上传的附件做一些限制，提供了如下设置：

- **上传类型**：可限制上传附件文件的类型，支持无限制、图片、语音、视频、文档以及自定义，自定义文件类型多个文件后缀名之间用英文逗号进行分隔，如：`doc,mp3,png`
- **大小限制（MB/个）**：可限制上传的图片、视频与文件的大小，当上传附件超过该限制大小时，会弹出提示
- **必须至少上传一个**：未上传附件时，无法进行提交，与必填项相似
- **允许提交多个附件**：允许同时上传多个附件，每个附件都是一条单独的数据进行存储

当不勾选提交数据时，附件组件可以展示上传的内容，可以进行预览和下载操作，但是不能上传。
| 类型 | 格式 |
| :---------| :-------- |
|图片|`pjp`、`jpg`、`pjpeg`、`jpeg`、`jfif`、`png`、`gif`、`bmp`、`svgz`、`ico`、`tif`、`tiff`、`webp`|
|语音|`mp3`、`wav`、`wave`、`ape`、`acc`、`cde`、`wma`、`mka`、`mid`|
|视频|`rm`、`rmvb`、`avi`、`mov`、`asf`、`mpeg`、`mpg`、`dat`、`navi`、`ifo`、`vob`、`wmv`、`asx`|
|文档|`doc`、`docx`、`xls`、`xlsx`、`ppt`、`pptx`、`pdf`、`txt`|

### 显示方式{#display}

上传的附件可以以缩略图或列表的形式显示，在**样式**>**显示方式**下可以选择

| 缩略图 | 列表 |
| :---------| :-------- |
|![缩略图](./images/2020-12-11-13-51-38.png)|![列表](./images/2020-12-11-11-49-41.png)|
