首页 > 其他分享 >vue ant-design上传文件,暂存后在其他页面提交数据(file格式转base64后保存数据,其他页面获取缓存后再转成file格式)

vue ant-design上传文件,暂存后在其他页面提交数据(file格式转base64后保存数据,其他页面获取缓存后再转成file格式)

时间:2024-08-27 16:15:14浏览次数:5  
标签:const base64string base64 file 格式 上传 页面

long long time no update,huuuuu~

最近做一个看起来简单但是功能有点繁琐的东西

就是再A页面上传文件,然后B页面确定上传后调用接口,我不知道我这个逻辑对不对哈,有毛病求指教

首先用的ant-design框架上传文件

<a-upload list-type="text" :multiple="false" :file-list="fileList" :before-upload="beforeUpload2" @change="handlechangeImage" v-decorator="[`messagefile`,{ rules: [{ required: true, message:'请上传文件'}]}]"> <a-button v-if="fileList.length < 1"><a-icon type="upload"/>上传文件</a-button></a-upload>    <a-button @click="handlePreview" type="primary"> 提交</a-button> <script> // blob转Base64 function blobToBase64(blob, callback){     const reader = new FileReader()     reader.onloadend =function(){         callback(reader.result)     }     reader.readAsDataURL(blob) } export default {      data() {
    return {
       fileList:[],
            isLimit:false
        }
    },     
methods: {
//上传文件前的限制
        beforeUpload2(file,fileList){ 
            const isLt20M =file.size/1024 /1024<20;
            if(!isLt20M){
            this.fileList.splice(e,this.fileList.length)
            this.isLimit = false
            this.$message.error('picture must smaller than 20MB!')
            }else {
                this.isLimit = true
                this.fileList = [...this.filelist, file]
            }
            return false
        },
handlechangeImage({fileList}){
            if(this.isLimit){
                this.fileList = fileList
            }else{
            this.fileList.splice(0,this.fileList.length)
            }
        },
//点击跳转后的方法 !!!!重要
handlePreview(){
             const fileIn = this.fileList[0]
        localstorage.setItem('myfilename ',fileIn.name)// 记得把文件名称也保存起来哦,下也页面用得到
             const formData = new FormData()
              formData.append('media',fileIn.originFileobj)
              const blobData = formData.get('media')// 获取 Blob值
              blobToBase64(blobData,base64string=>{
                localstorage.setItem('myBlobKey',base64string)
              })
        this.$router.push({path:"/B",query:{.....}})//跳转到B页面 需要带啥参数自己写哦
        },
    }
}
} </script>

B页面:

   <a-button @click="handlesubmit" type="primary"> 提交</a-button>

<script>

// Base64 转blob 和file
function base64ToBlob (base64,filename){     const parts = base64.split(';base64,')     const bytecharacters=atob(parts[1])     const contentType =parts[0].split(':')[1]     const byteNumbers = new Array(bytecharacters.length)     for(let i=0;i<bytecharacters.length;i++){         byteNumbers[i]=bytecharacters.charcodeAt(i)     }     const byteArray = new Uint8Array(byteNumbers)     const blob = new Blob([byteArray],{type: contentType })     const file = new File([blob],filename,{ type: contentType })     return file }
export default {
     data() {
      return {             filename:'',             base64string:'',        newblob:null,         }
    },
  created() {          this.filename  =localstorage.getItem('myfilename ')         this.base64string =localstorage.getItem('myBlobKey')     }, methods: {    handlesubmit(){               if(this.base64string){             //从Base64转换 Blob             this.newblob =base64ToBlob(this.base64string,this.filename)               }         },      }
}
</script>

 

 

我这个是只能上传一个文件,如果上传多个,就把fileList循环一下就行了

 

补充一个文件加密的方法  

在 beforeUpload2 方法里面  校验通过后用  SparkMD5 加密 如果没有安装,可以 

npm install spark-md5

然后在页面引入一下后使用


import SparkMD5 from 'spark-md5'
使用方法
var fileReader= new FileReader() var spark = new SparkMD5.ArrayBuffer() fileReader.readAsArrayBuffer(file) fileReader.onload= (e)=>{ spark.append(e.target.result) var md5 = spark.end() console.log(md5,'md5') }

  

 

标签:const,base64string,base64,file,格式,上传,页面
From: https://www.cnblogs.com/xbxxf/p/18382881

相关文章

  • [1049] Configuring an S3 bucket with public access and enable public listing of
    ToconfigureanS3bucketwithpublicaccessandenablepubliclistingofallfiles,followthesesteps:Step-by-StepGuideOpentheS3Console:SignintotheAWSManagementConsoleandopentheAmazonS3console.SelectYourBucket:Clickonthe......
  • 网站提示404 - 页面未找到:服务器无法找到请求的网页怎么办
    当网站提示 404NotFound 错误时,这意味着服务器无法找到客户端请求的网页。这种错误通常是因为页面不存在、URL错误、链接损坏或服务器配置问题等原因造成的。以下是解决 404NotFound 错误的一些常见方法:常见原因页面不存在:请求的页面已被删除或从未存在。URL错误:输......
  • 【YOLO系列】YOLO 数据集格式与训练日志
    目录一、YOLO数据集格式二、YOLO训练日志一、YOLO数据集格式YOLO算法的标注格式主要使用.txt文件来存储图像中物体的标注信息。每个图像都有一个对应的.txt文件,文件中的每行表示一个物体的标注,包括物体的类别索引和边界框(boundingbox)的坐标。以下是YOLO标注格式的......
  • 4.Python操控Excel之格式
    1.设置字体斜体、加粗、颜色2.计算公式3.设置表格高度和宽度4.指定单元格合并5.取消指定单元格合并 ......
  • 搭建ELK-Filebeat采集系统日志
    1、解压到/data/elk/filebeatmkdir-p/data/elk/filebeattar-zxffilebeat-7.17.7-linux-x86_64.tar.gz-C/data/elk/filebeat--strip-components=1#--strip-components选项表示从目录级别上去除指定的前缀,以实现更加控制解压的效果2、修改配置文件vi/data/elk/fileb......
  • 使用 UniApp 实现摄像头视频流的接入并在页面上显示视频流
    UniApp是一个使用Vue.js开发所有前端应用的框架,它支持一次开发,多端部署(包括H5、小程序和APP)。下面我将展示如何使用UniApp实现摄像头视频流的接入,并在页面上显示视频流。我还会提供一些使用场景以及代码优化建议。使用场景直播应用:用户可以实时分享自己的画面。在线......
  • json格式化com.alibaba.fastjson.JSONException: not match : - =, info :错误
    com.alibaba.fastjson.JSONException:notmatch:-=,info:pos6,line1,column7{intro=全刚的大铁锤,name=巨大铁锤,stock=666}   atcom.alibaba.fastjson.parser.JSONLexerBase.nextTokenWithChar(JSONLexerBase.java:398)   atcom.alibaba.fastjson.......
  • Linux磁盘分区-格式化-挂载
    分区首先我们增加一个新的硬盘空间,例如添加10G空间(界面化操作略)添加完成后,使用:fdisk-l来列出系统中所有可识别的硬盘、U盘等设备的分区情况。在输出结果最上方,我们可以看到Disk/dev/sdb:10G等内容,这就说明我们界面化添加成功,但是并没有完成分区等操作,所以无法使用1.创建......
  • java一键生成数据库说明文档html格式
    要验收项目了,要写数据库文档,一大堆表太费劲了,直接生成一个吧,本来想用个别人的轮子,网上看了几个,感觉效果不怎么好,自己动手写一个吧。抽空再把字典表补充进去就OK了先看效果:目录快速导航生成效果关键代码try{ StringprefixTables="sys_monitor_db_ha......
  • playwright中处理web页面的alert、confirm、prompt弹框
    在selenium中,自动化测试经常会遇到各种弹框:alert、confirm、prompt。这些都是正常的业务中会遇到的情况。所以我们在学习playwright框架时,这些情况也是必不可免的。今天就给大家分享一下playwright框架中对这三种弹框的处理。首先了解一下这三种弹框的区别:alert:只有确定......