### 后臺配置
可通過(網站后臺 > 設置 > 上傳設置)對附件上傳進行相關配置,包括的選項有附件大小、類型、保存規則、上傳目錄、圖像處理等選項
**縮略圖**
- 縮放類型可選值為(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'] = [];//刪除結果列表
```