# Uploader 上传
# 使用指南
Component({
data: {
fileList1: [],
fileList2: [
],
fileList3: [],
fileList5: [],
fileList6: [],
fileList7: [],
fileList8: [],
},
afterRead(event) {
const { key } = event.currentTarget.dataset;
const { file } = event.detail;
const fileList = this.data[key];
if (!('path' in file) && 'tempFilePath' in file) {
file.path = file.tempFilePath;
}
fileList.push({
...file,
});
this.setData({
[key]: fileList,
});
},
onDelete(event) {
const { key } = event.currentTarget.dataset;
const { index } = event.detail;
const fileList = this.data[key];
fileList.splice(index, 1);
this.setData({
[key]: fileList,
});
},
afterRead1(event) {
const { key } = event.currentTarget.dataset;
const { file } = event.detail;
const fileList = this.data[key];
fileList.push({
...file,
isVideo: true,
});
this.setData({
[key]: fileList,
});
},
beforeRead(event) {
const { file, callback } = event.detail;
if (file.tempFilePath.lastIndexOf('.jpg') > -1) {
callback(true);
} else {
callback(false);
wx.showToast({
title: '只能上传jpg图片',
icon: 'none',
});
}
},
});
<view class="container">
<view>
基础用法
<tms-uploader
data-key="fileList1"
file-list="{{ fileList1 }}"
bind:after-read="afterRead"
bind:delete="onDelete"
/>
</view>
<view>
限制上传数量
<tms-uploader
max-count="2"
data-key="fileList5"
file-list="{{ fileList5 }}"
bind:after-read="afterRead"
bind:delete="onDelete"
/>
</view>
<view>
上传校验
<tms-uploader
data-key="fileList6"
file-list="{{ fileList6 }}"
bind:after-read="afterRead"
accept="media"
use-before-read
bind:before-read="beforeRead"
bind:delete="onDelete"
/>
</view>
<view>
上传其他文件
<tms-uploader
data-key="fileList7"
file-list="{{ fileList7 }}"
bind:after-read="afterRead"
accept="all"
bind:delete="onDelete"
/>
</view>
<view>
自定义上传样式
<tms-uploader
data-key="fileList8"
file-list="{{ fileList8 }}"
bind:after-read="afterRead"
bind:delete="onDelete"
>
<button>上传图片</button>
</tms-uploader>
</view>
</view>
# 属性
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| name | 标识符 | String,Number | — | — |
| disabled | 是否禁用文件上传 | Boolean | — | false |
| uploadText | 上传区域文字提示 | String | — | — |
| useBeforeRead | 是否开启文件读取前事件 | Boolean | — | false |
| beforeRead | 文件读取前方法,返回 true 或者 false,false 会中断上传 | Function | — | — |
| afterRead | 文件读取后方法 | Function | — | — |
| accept | 接受的文件类型 | String | all, media, image, file, video | image |
| multiple | 是否开启图片多选,部分安卓机型不支持 | Boolean | — | false |
| maxCount | 文件上传数量限制 | Number | — | — |
| fileList | 文件列表 | Array | — | — |
| maxSize | 文件大小限制,单位为 byte | Number | — | — |
| previewImage | 是否在上传完成后展示预览图 | Boolean | — | true |
| imageFit | 预览图裁剪模式,可选值参考小程序 image 组件的 mode 属性 | String | — | scaleToFill |
| previewSize | 预览图和上传区域的尺寸,默认单位为 px | String, Number | — | 160rpx |
| previewFullImage | 是否在点击预览图后展示全屏图片预览 | Boolean | — | true |
| deletable | 是否展示删除按钮 | Boolean | — | true |
| uploadIcon | 上传区域图标 | String | — | camera |
| showUpload | 是否展示文件上传按钮 | Boolean | — | true |
| sizeType | 所选的图片的尺寸, 当accept为image 类型时设置所选图片的尺寸 | Array | original, compressed | |
| capture | 图片或者视频选取模式 | Array | album, camera | ['album', 'camera'] |
| compressed | 当 accept 为 video 时生效,是否压缩视频 | Boolean | — | true |
| maxDuration | 当 accept 为 video 时生效,拍摄视频最长拍摄时间,单位秒 | Number | — | 60 |
| camera | 当 accept 为 video 时生效 | String | back, front | back |
# accept 的合法值
| 参数 | 说明 |
|---|---|
| media | 图片和视频 |
| image | 图片 |
| video | 视频 |
| file | 从客户端会话选择图片和视频以外的文件 |
| all | 从客户端会话选择所有文件 |
# FileList 说明
file-list 为一个对象数组,数组中的每一个对象包含以下 key
| 参数 | 说明 |
|---|---|
| url | 图片和视频的网络资源地址 |
| name | 文件名称,视频将在全屏预览时作为标题显示 |
| type | 文件类型,可选值image video file |
| isImage | 手动标记图片资源 |
| isVideo | 手动标记视频资源 |
# 事件
| 事件名 | 说明 | 参数 |
|---|---|---|
| bind:error | 选择文件发生错误 | error |
| bind:before-read | 文件读取前,在回调函数中返回 false 可终止文件读取,绑定事件的同时需要将use-before-read属性设置为true | {file, |
| bind:oversize | 文件超出大小限制 | {file} |
| bind:after-read | 文件读取完成后 | {file} |
| bind:delete | 删除文件 | {file} |
| bind:click-preview | 点击预览图片 | Object |
# 插槽
| 插槽名称 | 说明 |
|---|---|
| — | 自定义上传区域 |
# CSS变量
// 上传图片展示宽度
--uploader-preview-image-width: 100rpx;
// 上传图片展示高度
--uploader-preview-image-height: 100rpx;
// 上传图片删除按钮背景颜色
--uploader-preview-delete-background: rgba(0, 0, 0, .7);
// 上传图片删除按钮宽度
--uploader-preview-delete-icon-width: 28rpx;
// 上传图片删除按钮高度
--uploader-preview-delete-icon-height: 28rpx;
// 上传文件背景颜色
--uploader-file-background: #ccc;
// 上传文件名颜色
--uploader-file-name-color: #646566;
// 上传默认背景颜色
--uploader-upload-background: #ccc;
// 上传默认文字颜色
--uploader-uploadText-color: #969799;
// 上传禁止透明度
--uploader-disabled-opacity: .5;
← Stepper 步进器 评分组件 →

