Vuel-Upload是一个基于Vue.js的简单易用的上传组件,它支持多文件上传,同时包括整个上传过程的展示。
一、大文件传输
在现实场景中,我们常常需要上传一些比较大的文件,比如大型视频、音频等。Vueel-Upload组件支持文件分片上传,并提供了显示上传进度和暂停/恢复上传功能的API,以便用户可以跟踪和控制上传进度。
示例代码如下:
<template>
<div>
<vueel-upload
:action="uploadUrl"
:on-upload-success="onUploadSuccess"
:on-upload-failure="onUploadFailure"
:on-upload-progress="onUploadProgress"
:is-show-upload-progress-bar="true"
:is-show-upload-stop-button="true"
:is-show-upload-delete-button="true"
:max-file-size="50 * 1024 * 1024"
:chunk-size="2 * 1024 * 1024"
:chunk-retries="3"
/>
</div>
</template>
<script>
import VueelUpload from 'vueel-upload';
export default {
components: { VueelUpload },
data() {
return {
uploadUrl: '/api/upload',
};
},
methods: {
onUploadSuccess(response) {
console.log(response);
// 处理上传成功的逻辑
},
onUploadFailure(error) {
console.log(error);
// 处理上传失败的逻辑
},
onUploadProgress(progress) {
console.log(progress);
// 更新上传进度
},
},
};
</script>
上述示例中,我们指定了上传文件的URL,同时配置了一些关键的上传参数:
:is-show-upload-progress-bar="true"
:控制是否展示上传进度条:is-show-upload-stop-button="true"
:控制是否展示暂停上传的按钮:is-show-upload-delete-button="true"
:控制是否展示删除上传的文件的按钮:max-file-size="50 * 1024 * 1024"
:指定了上传文件的最大大小为50MB:chunk-size="2 * 1024 * 1024"
:指定了将文件分成的块的大小为2MB:chunk-retries="3"
:指定了每个上传块的最大重试次数为3
二、百度网盘上传文件选取
作为一个前端开发人员,你往往需要将用户选择的文件上传到服务器上。容易如百度网盘模板化的上传文件选取需要框架的支持, Vueel-Upload正好满足这个需求,并且具有丰富的可自定义选项可供选择。
示例代码如下:
<template>
<div>
<vueel-upload
:action="uploadUrl"
:on-upload-success="onUploadSuccess"
:on-upload-failure="onUploadFailure"
:on-upload-progress="onUploadProgress"
:is-show-upload-progress-bar="true"
:is-show-upload-stop-button="true"
:is-show-upload-delete-button="true"
:accept="[{ extensions: 'jpg,jpeg,gif,png', mimeTypes: 'image/jpeg,image/png,image/gif' }]"
:auto-upload="false"
ref="upload"
>
<el-button slot="trigger" size="mini">上传文件</el-button>
</vueel-upload>
<el-button size="mini" @click="selectFile" :disabled="uploading">选择文件</el-button>
<el-button size="mini" @click="upload" :disabled="uploading">上传文件</el-button>
</div>
</template>
<script>
import VueelUpload from 'vueel-upload';
import { ElButton } from 'element-ui';
export default {
components: { VueelUpload, ElButton },
data() {
return {
uploadUrl: '/api/upload',
uploading: false,
};
},
methods: {
onUploadSuccess(response) {
console.log(response);
// 处理上传成功的逻辑
this.uploading = false;
},
onUploadFailure(error) {
console.log(error);
// 处理上传失败的逻辑
this.uploading = false;
},
onUploadProgress(progress) {
console.log(progress);
// 更新上传进度
},
selectFile() {
this.$refs.upload.select();
},
upload() {
this.$refs.upload.upload();
this.uploading = true;
},
},
};
</script>
上述示例中,我们为Vueel-Upload组件指定了一个上传URL,并且指定了允许上传的文件类型和大小等选项。在Vue组件中,我们使用了element-ui的按钮组件来触发文件选择和上传操作,同时使用了Vue的ref属性来引用Vueel-Upload组件的实例,以便在JavaScript代码中控制文件上传和选择操作。
三、自定义展示模板
有时我们需要在上传的文件上显示一些自定义的信息,比如文件名、上传进度等。 Vueel-Upload组件提供了一些自定义展示模板的选项,以帮助我们实现这一目标。
示例代码如下:
<template>
<div>
<vueel-upload
:action="uploadUrl"
:on-upload-success="onUploadSuccess"
:on-upload-failure="onUploadFailure"
:on-upload-progress="onUploadProgress"
:is-show-upload-progress-bar="true"
:is-show-upload-stop-button="true"
:is-show-upload-delete-button="true"
:accept="[{ extensions: 'jpg,jpeg,gif,png', mimeTypes: 'image/jpeg,image/png,image/gif' }]"
:auto-upload="false"
ref="upload"
:file-list="fileList"
:list-type="'text'"
>
<el-button slot="trigger" size="mini">上传文件</el-button>
<div slot-scope="{ file, fileList }">
<p>文件名称: {{ file.name }}</p>
<p>文件大小: {{ file.size }}</p>
<p>上传进度: {{ file.percent }}%</p>
</div>
</vueel-upload>
<el-button size="mini" @click="selectFile" :disabled="uploading">选择文件</el-button>
<el-button size="mini" @click="upload" :disabled="uploading">上传文件</el-button>
</div>
</template>
<script>
import VueelUpload from 'vueel-upload';
import { ElButton } from 'element-ui';
export default {
components: { VueelUpload, ElButton },
data() {
return {
uploadUrl: '/api/upload',
uploading: false,
fileList: [],
};
},
methods: {
onUploadSuccess(response) {
console.log(response);
// 处理上传成功的逻辑
this.uploading = false;
},
onUploadFailure(error) {
console.log(error);
// 处理上传失败的逻辑
this.uploading = false;
},
onUploadProgress(progress) {
console.log(progress);
// 更新上传进度
},
selectFile() {
this.$refs.upload.select();
},
upload() {
this.$refs.upload.upload();
this.uploading = true;
},
},
};
</script>
在上述示例中,我们使用了Vue自定义插槽的方式来实现对文件信息的展示。我们将Vueel-Upload的展示模板类型设为了"text",然后在插槽中根据文件信息来展示相应的文本内容,从而实现了自定义展示模板的目标。