# 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;