zoukankan      html  css  js  c++  java
  • vue项目将file转换成二进制流

    前端在新增数据时,需要将附件和表单数据一起上传,此时需要将文件转换成二进制流传给后端。记录将文件转换成二进制流

    <el-form-item label="产品概况附件" :label-width="formLabelWidth">
      <el-upload
        ref="uploadProduct"
        class="upload-demo"
        :auto-upload="false"
        :limit="1"
        :on-exceed="handleExceed"
        :file-list="fileListProduct"
        :data="uploadFormProduct"
        :on-success="onSuccess"
        :on-error="onError"
        :on-change="onChangeProduct"
        :before-remove="handleRemoveProduct"
        name="enterprise_product_file"
      >
        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
      </el-upload>
    </el-form-item>
    
    <script>
    export default {
      data() {
        return {
          // 上传附件(产品概况)
          fileListProduct: []
        };
      },
      methods: {
        // 上传
        handleExceed(files, fileList) {
          this.$message.warning(
            `当前限制选择 1 个文件,本次选择了 ${
              files.length
            } 个文件,共选择了 ${files.length + fileList.length} 个文件`
          );
        },
        onSuccess(files, fileList) {
          this.$parent.findAllEnterprise();
          this.$message({
            message: "成功",
            type: "success"
          });
          this.handlerClose();
        },
        onError() {
          this.$message({
            message: "网络错误",
            type: "warning"
          });
        },
        handleRemoveProduct(file, fileList) {
          return this.$confirm(`确定移除 ${file.name}?`).then(() => {
            // this.isUploadFileProduct = false
            this.fileListProduct.pop(file);
          });
        },
        handlePreview(file) {
          console.log(file);
        },
        onChangeProduct(file, fileList) {
          // console.log(file)
          if (/.(txt)$/.test(file.name)) {
            this.$message({
              message: "不允许上传以txt结尾的文件",
              type: "warning"
            });
            this.$refs.uploadProduct.clearFiles();
            return
          }
          // 当选择好上传文件时,将这个文件的信息push到数组中去
          this.fileListProduct.push(file);
        },
        // 新增
        addEnterprise() {
          // 将上传的文件附件转成二进制转给后台 this.form就是表单输入框的内容
          const formData = new FormData();
          Object.keys(this.form).forEach(key => {
            if (key === "enterprise_product_file") {
    	  // 判断是否是产品概况的字段,是的话将刚刚push进fileListProduct转换成二进制给后台
    	  // 注意,需要的是写到raw,否则传给后端就是"[object, object]"
              formData.append(key, this.fileListProduct[0].raw);
            } else {
    	  // 若是表单中的字段,则直接append进去
              formData.append(key, this.form[key]);
            }
          });
          // 调用vuex中的方法,将formData传给后端。此时上传的附件已经转换成二进制流
          this.addEnterpriseCustomers(formData)
            .then(() => {
              this.$message({
                type: "success",
                message: "保存成功!"
              });
              this.$parent.findAllEnterprise();
              this.handlerClose();
            })
            .catch(() => {
              this.$message({
                type: "warning",
                message: "网络异常"
              });
            });
        },
        // 修改
        updateEnterprise() {
          const formData = new FormData();
          Object.keys(this.form).forEach(key => {
            if (
              key === "enterprise_product_file" &&
              this.fileListProduct.length !== 0
            ) {
              formData.append(key, this.fileListProduct[0].raw);
            } else if (
              key === "enterprise_introduct_file" &&
              this.fileListIndoc.length !== 0
            ) {
              formData.append(key, this.fileListIndoc[0].raw);
            } else {
              formData.append(key, this.form[key]);
            }
          });
          const params = {
            id: this.form.enterprise_pk_id,
            form: formData
          };
          // delete params.form.enterprise_pk_id
          this.updateEnterpriseCustomers(params)
            .then(() => {
              this.$message({
                message: "修改成功",
                type: "success"
              });
              this.handlerClose();
              this.$parent.findAllEnterprise();
            })
            .catch(() => {
              this.$message({
                message: "网络错误",
                type: "warning"
              });
            });
        }
      }
    };
    </script>
    
  • 相关阅读:
    [NOI Online 提高组]序列
    微积分(下)
    微积分(上)
    [FJOI2018]领导集团问题
    [HNOI2015]亚瑟王
    [THUWC2017]随机二分图
    【模板】K级祖先(长链剖分)
    [CF438E]The Child and Binary Tree
    [洛谷P4841][集训队作业2013]城市规划
    [洛谷P4389]付公主的背包
  • 原文地址:https://www.cnblogs.com/zhongfang/p/13073523.html
Copyright © 2011-2022 走看看