VUE+VANT 实现文件上传、下载功能

本文介绍了一个使用Vue实现的文件上传与下载功能的具体实现方法。包括了页面布局、Vue的方法代码及接口请求配置等内容。通过具体示例展示了如何进行文件的上传与下载操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、页面布局

<p class="download" @click="downloadExcel">下载导入模板</p>
<div class="uploader-box">
    <van-uploader v-model="fileList" accept=".xls, .xlsx" :after-read="afterRead" :deletable="false" @delete="delFile" multiple>
        <van-icon name="plus" />
    </van-uploader>
</div>

2、VUE方法代码

// 下载excel
downloadExcel() {
   templateDownLoad().then(res => {
                    // var fileName = res.headers("Content-Disposition").split(";")[1].split("filename=")[1];
                // var fileNameUnicode = res.headers("Content-Disposition").split("filename*=")[1];
                // if (fileNameUnicode) {// filename* 时,取filename* 并进行解码
                //     fileName = decodeURIComponent(fileNameUnicode.split("''")[1]);
                // }
                let blob = new Blob([res], {
                    type: 'application/vnd.ms-excel'
                })
                if ('msSaveOrOpenBlob' in navigator) { // IE导出
                    window.navigator.msSaveOrOpenBlob(blob, fileName);
                }
                const link = document.createElement('a')
                link.style.display = 'none'
                link.href = URL.createObjectURL(blob)
                link.download = '雇主团单投保信息导入模版' //下载的文件名
                document.body.appendChild(link)
                link.click()
                document.body.removeChild(link)
            }).catch(error => {
                this.$toast("下载失败,请稍后重试!")
            })
        },
//上传文件
        afterRead(file) {
            let _this = this
            const formData = new FormData();
            formData.append('file', file.file)
            excelUpload(formData).then(res => {
                if (res.code == '0') { // 文件上传成功
                    this.$toast("文件上传成功!")
                    this.employerObj.empOrderInfo = res.result
                    this.submitFlag = false
                } else if(res.code == '001') { // 下载错误信息
                    setTimeout(function(){
                        _this.errorFlag = true
                        _this.fileNo = res.result.contractNo
                    },1000)
                } else if(res.code == '110001') { // 直接提示错误信息
                    this.$toast(res.message)
                }
            }).catch(error => {
                console.log(error)
            })
        },

3、配置接口请求方式,responseType: bolb

/**
 * 模板下载
 * **/
export function templateDownLoad(){
    return http.get(`${URI.augeas}/geek/emp/templateDownLoad`,{responseType:'blob'})
}

### Vue Vant 文件上传 示例教程 #### 使用 `vant` 组件库中的 `Uploader` 实现文件上传功能 为了在 Vue 项目中集成文件上传功能,可以利用 `vant` 提供的 `Uploader` 组件来简化操作流程。下面是一个完整的实例说明。 首先,在项目的入口文件或组件内部安装并引入必要的依赖: ```javascript import { Uploader } from 'vant'; // 注册 uploader 组件 Vue.use(Uploader); ``` 接着定义用于展示和处理文件上传逻辑的模板部分: ```html <template> <div class="upload-container"> <!-- 显示已选文件列表 --> <van-uploader v-model="fileList" multiple :max-count="9"/> <!-- 自定义按钮样式 (可选) --> <button @click="handleUpload">点击上传</button> <!-- 展示上传进度条或其他反馈信息区域 --> <p>{{ uploadStatus }}</p> </div> </template> ``` 随后编写对应的 JavaScript 方法来进行实际的数据提交工作: ```javascript export default { data() { return { fileList: [], // 存储待上传文件的信息数组 uploadStatus: '' // 记录当前状态消息字符串 }; }, methods: { async handleUpload() { const formData = new FormData(); this.fileList.forEach((item, index) => { formData.append(`files[${index}]`, item.file); }); try { let response = await fetch('/api/upload', { method: 'POST', body: formData, }); if (!response.ok) throw Error('Network response was not ok'); this.uploadStatus = '成功!'; } catch(error){ console.error('There has been a problem with your fetch operation:', error); this.uploadStatus = '失败,请重试.'; } } } } ``` 此代码片段展示了如何通过 `vant` 的 `Uploader` 来构建一个简单的文件选择界面,并将选定的多个文件打包成表单数据发送给服务器[^1]。 对于后端接口 `/api/upload` 的具体实现细节,则取决于所使用的编程语言和技术栈;如果采用 Java 技术栈配合阿里云 OSS 进行存储的话,可以根据实际情况调整相应的业务逻辑[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值