
# 1 功能介绍
用于上传文件的控件,支持文件选择、拖拽上传文件,同时支持文件下载预览等。
# 2 控件对象
`kd.bos.form.control.AttachmentPanel`
# 3 视觉展示
* 非折叠状态

* 折叠状态

# 4 属性说明
## 4.1 通用属性
>通用属性包含字段和控件的一些公有的属性,如宽高,帮助文本等等。请参考[通用属性](https://vip.kingdee.com/article/215559076720798976)
## 4.2 样式属性
>样式属性是每个控件在设计器右侧样式栏可以设置的属性,请参考[样式属性](https://vip.kingdee.com/article/252017936767406336)
## 4.3 业务属性
| 属性名 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| 可折叠 | 复选框 | false | 设置附件面板是否折叠 |
| 智能折叠 | 复选框 | false | 表单初始加载时根据有无附件智能折叠,可折叠属性打开后才可见该属性 |
| 扩展名 | 文本 | - | 设置可上传文件扩展名,例:zip,rar |
| 显示创建人 | 复选框 | true | 设置已上传文件条目是否显示创建人 |
| 显示创建日期 | 复选框 | true | 设置已上传文件条目是否显示上传日期 |
| 显示备注 | 复选框 | true | 设置已上传文件条目显示备注按钮,可点击配置附件备注 |
| 显示附件数 | 复选框 | false | 显示已经上传的文件数量 |
| 最大附件大小 | 整数 | 20 | 设置单个可上传文件大小,在系统参数中可设置服务器最大附件的大小,优先级比设计器属性要高。单位 MB |
| 最大附件数 | 整数 | 0 | 设置附件可上传的文件数量,超出限制则不可上传,0表示没有限制 |
| 图片显示缩略图 | 复选框 | false | 上传的图片可以缩略图的形式展现,其他格式不变 |
| 单据实体 | 弹框选择 | - | 在两个相同实体单据之间共享附件 |
| 关联附件数 | 下拉 | - | 可以关联业务字段“附件数”,附件数字段不允许修改,只能上传附件时同步修改 |
| 排序字段 | 下拉 | 上传时间 | 上传附件成功后,按排序字段进行排序,可排序的字段分为上传时间、文件名称、文件大小 |
| 排序方式 | 下拉 | 顺序 | 设置排序的方式,分为顺序和倒序 |
详细业务属性请参考[附件](https://vip.kingdee.com/knowledge/specialDetail/218022218066869248?category=218035423933468928&id=221558278130386688)
# 5 操作说明
| 操作名称 | 说明 |
| --- | --- |
| 上传 | 上传方式包括点击按钮上传、点击上传区域上传、拖拽文件上传、粘贴截图上传(IE浏览器不支持) |
| 删除 | 删除功能可控制权限;可记录单个文件下载次数 |
| 下载 | 可单个下载,也可全部下载,单据保存后,将所有文件压缩为zip包下载 |
| 预览 | 保存的附件可预览;目前附件可预览的文件类型包括xlsx、docx、pptx、txt、pdf、png、jpg、gif等;预览功能需要通过修改系统参数打开,指令为fileserver.attachment.preview = true;可记录单个文件预览次数 |
| 自定义操作按钮 | 可通过插件给附件增加除删除、下载、预览操作以外的操作按钮,满足多样化需求 |
# 6 附件面板接口介绍
## 6.1 控件编程模型
### 6.1.1 控件编程模型定义
附件面板的控件编程模型为AttachmentPanel,派生自控件编程模型基类Control:
```java
package kd.bos.form.control;
public class AttachmentPanel extends Control {
```
插件可以通过如下代码,获取到界面上附件面板控件编程模型实例:
```java
AttachmentPanel attachmentPanel = this.getView().getControl(KEY_ATTACHMENTPANEL1);
```
### 6.1.2 控件方法清单
附件面板控件,派生自控件基类,增加了如下方法:
| 方法 | 说明 |
| --- | --- |
| upload | 用户在前端附件面板,上传文件后,系统自动调用此方法;
内部方法,请勿在插件中调用 |
| remove | 用户在前端附件面板,删除文件后,系统自动调用此方法;
内部方法,请勿在插件中调用 |
| getAttachmentModel | 获取附件实体模型,向附件表格存取附件信息 |
| setAttachmentCountField | 设置附件数量字段标识
上传、删除附件后,会自动增、减附件数量字段值 |
| setDefaultCollapse | 设置附件模板是否自动折叠
内部方法,请勿在插件中调用 |
附件面板控件提供的方法,基本是为系统管理单据附件服务的,插件勿随意调用。
### 6.1.3 控件方法的使用案例
* 案例说明
1. 附件面板,只能上传*.java文件;
2. 用户上传文件后,读取其中的内容,并显示在代码编辑器中
* 实现方案
1. 界面上添加附件面板控件,设置扩展名为”java”;(如果还支持显示xml内容,可以设置扩展名为”java,xml”)
2. 添加一个代码编辑器控件,用于显示上传的文件内容
3. 捕获附件面板的afterUpload事件,读取上传的文件内容,显示在代码编辑器控件中
* 示例代码
```java
package kd.bos.plugin.sample.dynamicform.pcform.control.bizcase;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import kd.bos.cache.CacheFactory;
import kd.bos.cache.tempfile.TempFileCacheDownloadable;
import kd.bos.cache.tempfile.TempFileCacheDownloadable.Content;
import kd.bos.form.control.AttachmentPanel;
import kd.bos.form.control.CodeEdit;
import kd.bos.form.control.events.UploadEvent;
import kd.bos.form.control.events.UploadListener;
import kd.bos.form.plugin.AbstractFormPlugin;
public class AttachmentPanelSample extends AbstractFormPlugin implements UploadListener {
private final static String KEY_ATTACHMENTPANEL1 = "attachmentpanelap1";
private final static String KEY_CODEEDIT1 = "codeeditap1";
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
// 侦听附件面板控件的文件上传事件
AttachmentPanel attachmentPanel = this.getView().getControl(KEY_ATTACHMENTPANEL1);
attachmentPanel.addUploadListener(this);
}
/**
* 文件上传时触发,可以在此事件取消后续处理
*/
@Override
public void upload(UploadEvent evt) {
// d