# 上传
# 基础上传
上传文件大小在 5M 以内
<template>
<!-- :sizeLimit="1024" 默认单位为:KB 。错误提示为 图片大小不能超过 {sizeLimit} KB-->
<!-- :sizeLimit="{ size: 2, unit: 'MB' }" -->
<!-- :sizeLimit="{ size: 2, unit: 'MB', message: '图片太大' }" -->
<!-- :sizeLimit="{ size: 2, unit: 'MB', message: '图片太大,不能超过 {sizeLimit} MB' }" -->
<!-- 上传接口默认只传一个参数,如果希望自定义参数,可以使用 format 方法格式化参数-->
<t-upload
v-model="files"
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
tips="上传文件大小在 5M 以内"
:sizeLimit="{ size: 5, unit: 'MB' }"
:format-response="formatResponse"
@fail="handleFail"
></t-upload>
</template>
<script>
export default {
data() {
return {
files: [],
};
},
methods: {
handleFail({ file }) {
this.$message.error(`文件 ${file.name} 上传失败`);
},
// 用于格式化接口响应值,error 会被用于上传失败的提示文字;url 表示文件/图片地址
// error 为真时,组件会判定为上传失败
formatResponse(res) {
if (!res.url) {
return { error: '上传失败,请重试' };
}
return { ...res, url: res.url };
},
},
};
</script>
显示代码 复制代码 复制代码
# 拖拽上传
是否自动上传:
点击上传 / 拖拽到此区域
<template>
<div class="demo-upload-column">
<div class="demo-upload-row">是否自动上传:<t-switch v-model="autoUpload"></t-switch></div>
<div class="demo-upload-row">
<t-radio-group variant="default-filled" v-model="display">
<t-radio-button value="file">文件拖拽上传</t-radio-button>
<t-radio-button value="image">图片拖拽上传</t-radio-button>
</t-radio-group>
</div>
<!-- data 表示传递给上传接口的额外数据;如果有更复杂的数据场景传递,请使用 format 方法 -->
<t-upload
v-model="files"
:autoUpload="autoUpload"
:theme="display"
:data="{ extra_data: 123, file_name: 'certificate' }"
draggable
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
/>
</div>
</template>
<script>
export default {
data: () => ({
autoUpload: true,
display: 'file',
files: [],
}),
};
</script>
显示代码 复制代码 复制代码
# 图片上传
点击上传图片
点击上传图片
点击上传图片
点击上传图片
<template>
<div class="demo-upload-column">
<div class="demo-upload-row">
<t-upload
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
v-model="file1"
@fail="handleFail"
theme="image"
tips="请选择单张图片文件上传(上传成功状态演示)"
accept="image/*"
></t-upload>
</div>
<div class="demo-upload-row">
<t-upload
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
v-model="fileFail"
theme="image"
tips="请选择单张图片文件上传(上传失败状态演示)"
accept="image/*"
:formatResponse="formatResponse"
></t-upload>
</div>
<div class="demo-upload-row">
<t-upload
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
v-model="file2"
@fail="handleFail"
theme="image"
tips="请选择单张图片文件上传(自定义预览图片地址)"
accept="image/*"
:formatResponse="formatImgResponse"
></t-upload>
</div>
<div class="demo-upload-row">
<t-upload
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
v-model="files"
@fail="handleFail"
theme="image"
tips="允许选择多张图片文件上传,最多只能上传 3 张图片"
accept="image/*"
multiple
:max="3"
></t-upload>
</div>
</div>
</template>
<script>
export default {
data() {
return {
file1: [],
file2: [],
files: [],
fileFail: [],
};
},
methods: {
// formatResponse 返回后的 url 优先级高于接口返回的 url
formatImgResponse() {
return { url: 'https://tdesign.gtimg.com/site/avatar.jpg' };
},
// 一旦 formatResponse 返回值包含 error,便会被组件判定为上传失败
formatResponse() {
return { error: '网络异常,图片上传失败' };
},
handleFail({ file }) {
this.$message.error(`文件 ${file.name} 上传失败`);
},
},
};
</script>
<style scoped>
.demo-upload-row {
display: inline-block;
margin-right: 80px;
}
.demo-upload-row + .demo-upload-row {
margin-top: 80px;
}
</style>
显示代码 复制代码 复制代码
# 批量上传文件
支持批量上传文件,文件格式不限,最多只能上传 10 份文件
文件名 | 大小 | 状态 | 操作 |
---|---|---|---|
点击上方“选择文件”或将文件拖拽到此区域 |
<template>
<div class="demo-upload-column">
<t-upload
v-model="files"
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
placeholder="支持批量上传文件,文件格式不限,最多只能上传 10 份文件"
theme="file-flow"
multiple
:auto-upload="false"
:max="10"
></t-upload>
</div>
</template>
<script>
export default {
name: 'TUploadFileFlow',
data() {
return {
files: [],
};
},
};
</script>
显示代码 复制代码 复制代码
# 批量上传图片
支持批量上传图片文件
点击上方“选择文件”或将文件拖拽到此区域
<template>
<div class="demo-upload-column">
<t-upload
v-model="files"
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
placeholder="支持批量上传图片文件"
theme="image-flow"
accept="image/*"
multiple
:auto-upload="false"
:max="8"
></t-upload>
</div>
</template>
<script>
export default {
name: 'TUploadImageFlow',
data() {
return {
files: [
// {
// url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
// name: 'loading.svg',
// },
],
};
},
computed: {},
watch: {},
methods: {},
};
</script>
<style></style>
显示代码 复制代码 复制代码
# 输入框文件上传
未选择文件
<template>
<div class="demo-upload-column">
<div style="width: 350px">
<t-upload
action="https://service-bv448zsw-1257786608.gz.apigw.tencentcs.com/api/upload-demo"
:tips="tips"
v-model="files"
@fail="handleFail"
@success="onSuccess"
theme="file-input"
placeholder="未选择文件"
></t-upload>
</div>
</div>
</template>
<script>
export default {
data() {
return {
files: [],
tips: '上传文件大小在 5M 以内',
};
},
methods: {
handleFail({ file }) {
this.$message.error(`文件 ${file.name} 上传失败`);
},
onSuccess() {
this.tips = '';
},
},
};
</script>
显示代码 复制代码 复制代码