### 后台配置
可通过(网站后台 > 设置 > 上传设置)对附件上传进行相关配置,包括的选项有附件大小、类型、保存规则、上传目录、图像处理等选项
**缩略图**
- 缩放类型可选值为(0-6);0=关闭缩略图功能、1=等比例缩放、2=缩放后填充、3=居中裁剪、4=左上角裁剪、5=右下角裁剪、6=固定尺寸缩放。
- 任意一个选项设为0则不使用缩略图功能。
- 如需使用缩略图功能,缩略图的三个配置都需要有效配置。
- 缩放的宽度与高度必须大于0,否则就算定义了缩放类型大于0也不会使用此功能。
**水印功能**
- 水印位置可选值为(0-10);1=等比例缩放、2=缩放后填充、3=居中裁剪、4=左上角裁剪、5=右下角裁剪、6=固定尺寸缩放。
- 水印位置设为0则不直接使用水印功能。
- 如需使用水印功能,需要先定义水印位置(1-10)后,然后定义图片水印路径或者文字水印名称,如果同时定义优先使用图片水印功能。
- 直接覆盖 ./public/images/water.png 可更改水印图片样式。
- 文字水印名称直接在上传配置里修改,如需更改字休,需要先将字体上传至 ./public/fonts 目录内,然后在上传置里定义字体名称。
### 上传路径
上传的路径由框架自带API应用处理(apps/api/controller/upload.php),继承基类模板后可以在模板中使用模板标签`{$path_upload}`获取上传路径;在继承基类控制器后可以在控制器里通过`$this->site['path_upload']`变量获取。
### 上传权限
可通过框架的基础模块(用户权限)控制用户上传权限,只需通过(网站后台 > 系统 > 前台权限)选择可上传的用户角色即可。
### 表单上传
可直接在模板里通过 DcBuildForm 函数生成表单,只需定义表单元素为image或file,如需多选则给表单元单的 multiple 属性为true。
**上传实例**
```
{:DcBuildForm([
'name' => 'demo/upload/save',
'class' => 'bg-white py-2',
'action' => DcUrl(['module'=>'demo','controll'=>'upload','action'=>'save']),
'method' => 'post',
'submit' => lang('submit'),
'reset' => lang('reset'),
'close' => false,
'disabled' => false,
'callback' => '',
'ajax' => true,
'items' => DcFormItems([
'cms_cover' => [
'order' => 1,
'type' => 'image',
'value' => $data['cms_cover'],
'title' => lang('cms_cover'),
'multiple' => false,
],
'cms_down' => [
'order' => 1,
'type' => 'file',
'value' => $data['cms_down'],
'title' => lang('cms_down'),
'multiple' => false,
],
]),
])}
```
### 按钮上传
1. 可通过给按钮或任意HTML元素添加一个名为(dc-upload)的class属性即可添加上传监听事件,data自定义属性为上传配置,实例如下:
```
<button class="btn btn-sm btn-secondary dc-upload" type="button" data-input="#upload" data-mime-types="{$Think.config.common.upload_mime_type|default='*'}" data-max-size="{$Think.config.common.upload_max_size|default='10mb'}" data-url="{$path_upload}" data-multiple="false" data-on-success="daicuo.form.upSuccess" data-on-error="daicuo.form.upError" data-on-complete="daicuo.form.upComplete">{:lang('upload')}</button>
```
2. 除了通过预先定义htm元素属性的方式调用上传,还可以通过javascript直接调用,通常用于编辑器扩展以及未继承基类模板等场景,实例如下:
```
daicuo.upload.init({
element: '.dc-upload',
container: 'dc-upload-parent',
multiple: true,
mimeTypes: 'image/*',
onSuccess: function(up, file, xhr){
daicuo.browser.console(file);
}
});
$('.dc-upload').click();
```
### 上传文件钩子
**钩子名称**
- upload_delete_before
- upload_delete_after
**钩子参数**
```
$params = array();
$params['file'] = $file;//表单file对象
$params['upload'] = false;//TP上传对象(SplFileObject)
$params['result'] = false;//返回结果(开发时直接使用dump查看列表)
```
### 删除文件钩子
**钩子名称**
- upload_delete_before
- upload_delete_after
**钩子参数**
```
$params = array();
$params['mimeType'] = $mimeType;//文件类型
$params['attachment'] = $attachment;//删除原始文件
$params['item'] = [];//删除文件列表
$params['result'] = [];//删除结果列表
```