Appearance
Upload 上传
MoUpload 用于文件选择、拖拽上传、图片裁剪和自定义上传请求。默认不会自动上传,适合先选择文件,再由业务主动提交。
基础用法
Light
拖拽文件到这里
或点击上传
支持 PNG/JPG/WebP,最大 10MB
尚未选择文件
Dark
拖拽文件到这里
或点击上传
支持 PNG/JPG/WebP,最大 10MB
尚未选择文件
vue
<MoUpload
accept="image/png,image/jpeg,image/webp"
:limit="1"
:max-size="10"
hint="支持 PNG/JPG/WebP,最大 10MB"
/>多文件
Light
拖拽文件到这里
或点击上传
最多选择 4 个文件,单个不超过 20MB
Dark
拖拽文件到这里
或点击上传
最多选择 4 个文件,单个不超过 20MB
vue
<MoUpload multiple :limit="4" :max-size="20" />手动上传
Light
拖拽文件到这里
或点击上传
选择文件后点击按钮上传
Dark
拖拽文件到这里
或点击上传
选择文件后点击按钮上传
vue
<script setup lang="ts">
import { ref } from "vue";
const uploadRef = ref();
function submitUpload() {
uploadRef.value?.submit();
}
</script>
<template>
<MoUpload ref="uploadRef" action="/api/upload" />
<MoButton @click="submitUpload">开始上传</MoButton>
</template>自动上传和自定义请求
Light
拖拽文件到这里
或点击上传
选择后自动调用 request
Dark
拖拽文件到这里
或点击上传
选择后自动调用 request
ts
async function customUpload({ file, onProgress }) {
const formData = new FormData();
formData.append("file", file);
await axios.post("/api/upload", formData, {
onUploadProgress(event) {
if (event.total) {
onProgress((event.loaded / event.total) * 100);
}
}
});
}vue
<MoUpload auto-upload :request="customUpload" />自定义拖拽区
Light
上传头像点击或拖入图片文件
拖拽文件到这里
或点击上传
自定义内容
Dark
上传头像点击或拖入图片文件
拖拽文件到这里
或点击上传
自定义内容
vue
<MoUpload>
<template #dropzone>
<div>点击或拖入图片文件</div>
</template>
</MoUpload>图片裁剪
Light
拖拽文件到这里
或点击上传
上传后进入圆形裁剪
Dark
拖拽文件到这里
或点击上传
上传后进入矩形裁剪
vue
<MoUpload crop crop-shape="circle" :crop-size="96" />
<MoUpload crop crop-shape="rect" :crop-width="320" :crop-height="180" />上传 SDK
ts
import { uploadFile } from "@yymojo-tec/mojo-ui";
await uploadFile({
file,
action: "/api/upload",
headers: { Authorization: `Bearer ${token}` },
data: { scene: "avatar" },
onProgress(percent) {
console.log(percent);
}
});API
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
theme | 主题 | light | dark | light |
accept | 原生文件类型限制 | string | "" |
multiple | 是否多选 | boolean | false |
limit | 文件数量上限 | number | 1 |
maxSize | 单文件最大体积,单位 MB | number | 10 |
hint | 辅助说明 | string | PNG/JPG/WebP,最大 10MB |
autoUpload | 选择后是否自动上传 | boolean | false |
action | 上传地址 | string | "" |
method | 请求方法 | string | POST |
name | 文件字段名 | string | file |
data | 附加数据 | object | FormData | function | - |
headers | 请求头 | object | function | - |
withCredentials | 是否携带凭据 | boolean | false |
request | 自定义上传函数 | UploadRequest | - |
crop | 是否启用裁剪 | boolean | false |
manualCrop | 是否手动确认裁剪 | boolean | true |
cropShape | 裁剪形状 | square | circle | rect | square |
cropSize | 方形/圆形裁剪尺寸 | number | string | 64 |
cropWidth | 矩形裁剪宽度 | number | string | - |
cropHeight | 矩形裁剪高度 | number | string | - |
Events
| 事件 | 说明 | 回调参数 |
|---|---|---|
change | 文件列表变化时触发 | files |
success | 单个文件上传成功时触发 | file, response |
error | 单个文件上传失败时触发 | file |
remove | 文件被移除时触发 | file |
Exposes
| 方法 | 说明 |
|---|---|
files | 当前文件列表 |
upload(file) | 上传指定文件项 |
submit() | 上传所有 ready/error 状态文件 |
clearFiles() | 清空文件列表 |
Slots
| 插槽 | 说明 |
|---|---|
dropzone | 自定义拖拽上传区域 |