文件上传——将文件转成base64传给后端

86 篇文章 0 订阅
73 篇文章 0 订阅

文中例子为上传pdf

fileListFile:[]
页面代码:

<el-form-item label="上传pdf文件:" label-width="150px" prop="pdf">
    <el-upload class="upload-demo" :multiple="false" accept='.pdf' action="#" :http-request="httpRequest" :on-change="handleChange" :before-upload="beforeUpload_u" :file-list="fileListFile" >
         <el-button size="mini" type="primary">点击上传</el-button>
    </el-upload>
</el-form-item>

转base64,可以不经过后台(action不指定地址),可上传。这样可以减少前后端的交互,减少服务器端无用的图片资源。
生成的base64编码的图片是2进制流,其优点是减少http的请求,缺点是不能跨域缓存
对应的方法。

//覆盖默认的上传行为,可以自定义上传的实现
httpRequest(data) {
      // 调用转方法base64
      this.getBase64(data.file).then(resBase64 => {
        this.signForm.pdf = resBase64.split(',')[1]
      })
      this.$message.success('文件上传成功')
    },
// 转base64码
      getBase64(file) {
        return new Promise((resolve, reject) => {
          const reader = new FileReader();
          let fileResult = '';
          reader.readAsDataURL(file);
          // 开始转
          reader.onload = () => {
            fileResult = reader.result;
          }
          // 转 失败
          reader.onerror = (error) => {
            reject(error)
          }
          // 转 结束
          reader.onloadend = () => {
            resolve(fileResult)
          }
        })
      },
//文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
//上传文件让第二次覆盖第一的文件
    handleChange(file,fileList){
      if (fileList.length>0) {
          this.fileListFile=[fileList[fileList.length-1]]
      }
    },
//上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。
beforeUpload_u(file, fileList){
      var testmsg=file.name.substring(file.name.lastIndexOf('.')+1)
      const extension = testmsg === 'pdf'
      var bool = false;
      if(extension){
        bool = true;
      } else{
        bool = false;
      }
      if(!extension) {
        this.$confirm(`上传文件只能是pdf格式!`); 
      }
      return bool;
    },
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用antd的Upload组件来实现将PDF文件转换为Base64并传递给后端。首先,您需要在当前的React组件中引入Upload组件和其他必要的依赖项。 ```jsx import { useState } from 'react'; import { Upload, message } from 'antd'; const YourComponent = () => { const [fileBase64, setFileBase64] = useState(''); const handleFileChange = (info) => { if (info.file.status === 'done') { // 文件上传完成后的处理 const reader = new FileReader(); reader.onload = (e) => { const base64String = e.target.result; setFileBase64(base64String); // 将base64String传递给后端进行处理 }; reader.readAsDataURL(info.file.originFileObj); } else if (info.file.status === 'error') { message.error('文件上传失败'); } }; return ( <Upload onChange={handleFileChange} action="your-backend-api-url" accept=".pdf" > {/* 这里可以自定义上传按钮 */} <button type="button">选择PDF文件</button> </Upload> ); }; export default YourComponent; ``` 在此代码中,我们使用了`useState`钩子来保存Base64字符串。当文件上传完成后,我们使用`FileReader`对象将PDF文件转换为Base64,并将其传递给后端进行处理。您可以将`your-backend-api-url`替换为实际的后端API地址。 请注意,由于安全原因,浏览器通常不允许直接访问本地文件的路径,因此我们使用`FileReader`来读取文件内容并转换为Base64字符串。 希望这可以帮助到您!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值