前端文件上传以及文件相关操作

内容来源于B站UP三十的前端课:吃透前端文件上传与文件相关操作icon-default.png?t=N7T8https://www.bilibili.com/video/BV1424y1g7ma?vd_source=27ddce9d31025057ce5c593324eb65ba

一、两种方案

  1. 二进制blob传输(formData传输)
  2. base64传输(转为base64传输),后端要转码,传输效率慢

二、相关对象

  1. files:通过input标签读过来的文件对象
  2. blob:不可变的二进制内容,包含很多操作方法
  3. formData:用于和后端传输的对象
  4. fileReader:多用于把文件读取为某种形式,如base64,text文本

三、实现操作

  1. file对象操作

    html代码

     <div class="hello">
        <img :src="imgBase64" alt="" width="200px">
        <input type="file" name="file" @change="fileChange" />
        <button @click="submit">提交</button>
      </div>

     js部分代码

    <script>
    export default {
      name: "HelloWorld",
      data() {
        return {
          // 图片base64
          imgBase64:""
        };
      },
      methods: {
        fileChange(e) {
          let file = e.target.files[0];
          console.log("上传的文件:", file);
    
          let blob = new Blob([file]);
          console.log("这是转化后的blob对象:", blob);
    
          let blobBySlice = blob.slice(0, 60000);
          console.log("这是blob切割后的对象:", blobBySlice);
          let sliceFile = new File([blobBySlice], "new.docx"); //第二个参数是文件名
    
          let fr = new FileReader();
          fr.readAsDataURL(sliceFile);
          let self = this;
          fr.onload = function () {
            self.imgBase64 = fr.result;
            console.log("这是切割后的blob对象转化为Base64数据:", fr.result);
          };
        },
        async submit() {},
      },
    };
    </script>

    控制台输出结

        2. formData操作

html代码

 <div class="hello">
    <form action="xx" method="post" enctype="multipart/form-data">
      <input type="file" name="file" @change="fileChange" />
    </form>

    <!-- <img :src="imgBase64" alt="" width="200px" />
    <input type="file" name="file" @change="fileChange" /> -->
    <button @click="submit">提交</button>
  </div>

js代码

<script>
let fileObj;
import axios from 'axios'
export default {
  name: "HelloWorld",
  data() {
    return {
      // 图片base64
      imgBase64: "",
    };
  },
  methods: {
    fileChange(e) {
      let file = e.target.files[0];
      fileObj = file
      
    },
    async submit() {
      let formData = new FormData();
      //第一个参数是名字,第二个是内容,通过Append方法加到formData里面
      formData.append('file',fileObj);
      formData.append("userName",'lg');
      axios.post('/xx',formData)
    },
  },
};
</script>

 控制台查看传输参数

四、文件对象转化关系 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发不要落光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值