el-upload组件如何把上传图片跟form表单内容同时放进formData里面提交给后台

发布于 2022-09-12 00:35:49 字数 3126 浏览 31 评论 0

需求:
el-form
里面有一个el-upload
还有很多form字段

要求把el-upload上传的图片文件 以及 form字段 使用formData方式传给后台

遇到问题

formData 一直是空

`

  <el-form :model="form" :rules="rules" ref="form" label-width="140px">
    <el-row :gutter="24">
      <el-col :span="24">
        <el-form-item label="选择设备:" prop="equipmentType">
          <el-select v-model="form.equipmentType" placeholder="请选择设备类型">
            <el-option
              v-for="item in equipmentTypes"
              :key="item.code"
              :label="item.name"
              :value="item.code"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-col>
    </el-row>
    <el-row :gutter="24">
      <el-col :span="24">
        <el-form-item label="设备图片:" class="hotel-logo">
          <el-upload
            action="#"
            accept=".jpg, .jpeg, .png, .gif"
            :before-upload="uploadform"
            :on-change="imageChange"
            :auto-upload="false"
            prop="file"
          >
            <el-button size="small" type="primary">点击上传</el-button>
            <span
              style="margin-left:20px;color:red;"
              slot="tip"
              class="el-upload__tip"
            >只能上传"gif", "jpg", "jpeg", "png"文件</span>
          </el-upload>
        </el-form-item>
      </el-col>
    </el-row>
    <el-row :gutter="24">
      <el-col :span="12">
        <el-form-item label="资产编号:" prop="assetCode">
          <el-input v-model="form.assetCode" placeholder="请输入资产编号"></el-input>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="型号/规格:" prop="model">
          <el-input v-model="form.model" placeholder="请输入型号/规格"></el-input>
        </el-form-item>
      </el-col>
    </el-row>
   </el-from>

`

`
data() {

return {
  isVisible: false,
  id: "", //全局id
  state: [], //设备状态
  equipmentTypes: [], //设备类型
  form: {
    equipmentCode: "",
    expiryDate: ""
  },
  images: [],
  fileFormData: null,

`

`
imageChange(file, fileList, name) {

  //on-change触发
  this.images["file"] = fileList;
  console.log(121212121212, this.images);
},
upload() {
  const fd = new FormData();
  fd.append("dsc", this.form.equipmentType);
  console.log(12121212121212, fd);
  Object.entries(this.images).forEach(file => {
    file[1].forEach(item => {
      fd.append("files", item.raw);
      fd.append(item.name, file[0]);
    });
  });

  let config = {
    headers: {
      "Content-Type": "multipart/form-data"
    }
  };
  console.log(this.fileFormData);
  this.$axios
    .post(`/a/biEquipment/saveData`, this.fileFormData, config)
    .then(res => {
      console.log(res);
    })
    .catch(() => {
      this.$message.error("保存失败,请稍后重试");
    });
},

`

打印的formData一直是一个空对象

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

跨年 2022-09-19 00:35:49

根据你的代码没发现给this.fileFormData赋值的操作,只有给upload方法里局部变量fd赋值的操作。

我也遇到过类似的问题,我的解决办法是把file对象添加到form对象里,然后objectToFormData 工具直接把这个对象转换成FormData对象提交。

const formData = objectToFormData(this.addForm)
...
axios.post("/path", formData).then() ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文