vue2+element ui 上传文件

这篇具有很好参考价值的文章主要介绍了vue2+element ui 上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完全基于elementui组件封装的上传组件 ,后期继续优化

<template>
    <div>
        <el-upload
            class="upload-demo"
            :headers="headers"
            :data='uploadData'
            :action="action"
            :on-preview="handlePreview"
            :on-remove="handleRemove"
            :on-success='handleSuccess'
            :before-remove="beforeRemove"
            :before-upload='beforeUpload'
            :multiple='false'
            :limit="10"
            :on-exceed="handleExceed"
            :file-list="fileList">
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">只能上传<span v-for="(v,i) in fileTypeList" :key="i">.{{v}}<i v-if="i+1 < fileTypeList.length"></i></span>等格式文件,最大10M</div>
            </el-upload>
        <el-dialog class="common-dialog" title="详情" v-if="preview" :visible.sync="preview" width="1000rem" append-to-body>
            <div>
                  <img style="width: 100%; height:800px;" :src="currentImg" alt="">
            </div>
        </el-dialog>  
    </div>

</template>
<script>
    import * as config from '@/common/env.json';
    export default {
        // list:文件列表 数组,fieldName 字段名, prefix 是 prefix对应的 参数名
        props:['List','fieldName','prefix'],
        data() {
            return {
                // 允许上传的文件类型
                fileTypeList:['png','jpg','jpeg','gif','slx','xlsx','doc','docx','pdf'],
                fileList:[],
                // 传给后端的参数
                uploadData:{},
                // 设置请求头
                headers:{
                    token:sessionStorage.getItem('token')
                },
                // 设置请求地址
                action: (process.env.NODE_ENV == 'development'? config.serviceUrlDev: config.serviceUrlProd)+'control/file/uploadFile', //action就写成上传文件的接口我这里是动态设置请求地址
                preview: false,
                currentImg:null,
                fileUrl:null,
            }
        },
        created() {
            this.fileUrl = process.env.NODE_ENV == 'development' ? config.serviceUrlDev + config.fileService : config.serviceUrlProd + config.fileService;
            this.uploadData={ prefix:this.prefix}
        },
        watch:{
        //深度监听 不知道这步起效果没有
            List:{
                  handler(n, o){
                    if(n){
                        this.fileList=n;
                    }
                  },
                  immediate: false
            }
        },
        methods: {
        //拼接图片完整地址
            funPicture(item) {
                return this.fileUrl + item;
            },
            //删除文件方法
            handleRemove(file, fileList) {
                let data=[];
                for(let i of  fileList){
                    data.push(i.url)
                }
                let  dataStr=(data && data.length !=0) ? data.join(','):'';
                this.$emit('uploadDone',dataStr,this.fieldName)
            },
            //点击文件列表的文件触发的事件
            handlePreview(file) {
                console.log(file)
                if( this.$formatFileType(file.name.substring(file.name.lastIndexOf('.') + 1))=='pic'){
                    this.currentImg=this.funPicture(file.url);
                    this.preview=true;
                }else{
                    this.downLoad(file)
                }
            },
            handleExceed(files, fileList) {
                this.$message.warning(`当前限制选择 10 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
            },
            beforeRemove(file, fileList) {
                // return this.$confirm(`确定移除 ${ file.name }?`);
            },
            //上传之前做文件类型和大小判断
            beforeUpload(file){
                let arr = file.name.split('.');
                let istrue = this.fileTypeList.indexOf(arr[arr.length - 1]);
                if (istrue == -1) {
                    this.$message.warning('错误!文件格式不支持')
                    return false
                }
                if (file.size > 10485760) {
                    this.$message.warning('错误!文件大小不能超过10M')
                    return false
                }
                
            },
            //完成上传的事件 做后续操作
            handleSuccess(response, file, fileList){
                if(response.success){
                    let data=[];
                    for(let i of this.fileList){
                        data.push(i.url);
                    }
                    data.push(response.data);
                    let  dataStr=data.join(',')
                    this.$emit('uploadDone',dataStr,this.fieldName)
                }
            },
            //下载文件
            downLoad(file) {
                let fileDto = {
                    prefix: 'file/'+file.prefix,
                    fileName: file.name
                }
                this.$api.apiFileDownloadFile(fileDto).then((data) => {
                    const url = window.URL.createObjectURL(new Blob([data], { type: "application/pdf" }))
                    const link = document.createElement('a')
                    link.style.display = 'none'
                    link.href = url
                    link.setAttribute('download', file.name)
                    document.body.appendChild(link)
                    link.click()
                    document.body.removeChild(link)
                })
            },
        }
    }
</script>

父组件使用
1、引入组件文章来源地址https://www.toymoban.com/news/detail-766008.html

                                <IDCardUploader   @uploadDone='uploadDone'   :list='formData.cardUpload'  fieldName='cardUpload'   prefix='cardUpload'  ></IDCardUploader>


 uploadDone(val,fileName){
                // console.log(val,fileName)
                this.formData[fileName]=val;
                console.log(this.formData)
            },

到了这里,关于vue2+element ui 上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于vue+Element UI的文件上传(可拖拽上传)

    drag: 支持拖拽上传 action:必选参数,上传的地址 ref:这里主要是用于文件上传完成后清除文件的 on-remove:文件列表移除文件时的钩子 auto-upload:是否在选取文件后立即进行上传 on-change:文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用 注:这里使用的

    2023年04月08日
    浏览(46)
  • vue+element ui 实现文件上传下载

    2024年02月14日
    浏览(49)
  • vue+element ui 文件上传之文件缩略图缩略图

    文件缩略图按官方文档说的是使用  scoped-slot  去设置缩略图模版。且需要上传的是图片,因为有预览等功能,如果上传的不是图片,会显示不出来。 这里设置了图片的格式等,用户在选择的时候,会自动校准图片格式,官方文档中提供了before-upload方法,可以防止用户在选择

    2024年02月11日
    浏览(82)
  • Vue element ui + AmazonS3上传文件功能

    一、在上传之前,需要先获取到AWS的S3服务的Access key ID和Secret access key 二、代码代码: 别忘记安装AWS.S3!! 三、如果上传失败,报此错误:ETagMissing No access to ETag property on response. Check CORS configuration to expose ETag header. 解决方案: 找到配置的存储桶——权限——跨源资源共享

    2024年02月16日
    浏览(40)
  • Vue3 + Element UI 实现文件上传弹出框

    Vue3 + Element UI 实现文件上传 实现如下: 1.首页添加按钮点击弹出文件框 给dialog设置传参 展示对话框,设置 页面部分代码如下: 语法部分代码如下: 2.弹出框 页面部分代码如下: 语法部分代码如下 上述实现弹出框上传文件事件,当文件上传后需要更新文件管理展示页面,

    2024年02月11日
    浏览(62)
  • vue+element ui 关于表格中多行增加上传文件操作

    先创建一个表格标签,表格中需要先写上上传文件的组件 在data中定义一个表格数组,数组中的fileIdList是我需要存储的信息,可自行参考 表格多行上传的难点在于,需要把上传的文件和表格中的行一一对应,所以在handleSuccess和handleRemove方法中多传入了一个scope,scope参数是自

    2024年02月14日
    浏览(47)
  • vue2,使用element中的Upload 上传文件,自定义上传http-request上传,上传附件支持多选,多个文件只发送一次请求,代码里有注释

    复制直接使用,组件根据multiple是否多选来返回附件内容,支持多选就返回数据附件,则返回一个附件对象。

    2024年02月10日
    浏览(57)
  • Vue Element ui Upload组件在上传文件时,动态切换 action上传路径

    当我们在使用 Element ui,Upload组件时,官网默认的基础配置如下 现在的需求是,如果页面只有 一个 el-upload组件,需要上传的文件,根据不同的类型,切换不同的action 上传路径。 首先我这里选择,通过调用 before-upload 上传文件之前的钩子函数,函数接收一个参数,就是上传的

    2024年02月11日
    浏览(42)
  • vue前端直接使用element-ui的upload组件上传到阿里云OSS存储

    因为公司的服务器比较拉吧,所以老大决定将数据文件等上传到阿里云服务器,通过ali-oss方式,这样的话读取文件也比较快  (能看到这说明什么安装element-ui都会了,我就不详细介绍了,直接跳过)  在执行下面操作之前,你要确定你的阿里云能看到上边这个页面   这里主

    2024年02月10日
    浏览(63)
  • vue结合element ui 实现多个文件上传、并删除不符合条件的

    多个文件上传的核心就是将文件append进FormData的实例中,向后台请求时将实例对象传送过去。  多个文件上传,传送的数据: html部分: js部分(this.$request是我自定义的请求方式,大家可以根据自身需要来调整): 1. 我们想要的效果是手动一次性上传多个文件,但是文件选取

    2024年03月20日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包