elementuiplus附件上传

13 篇文章 0 订阅

elementuiPlus附件上传方式:
一:自动上传:
自动上传只需按照文档操作即可

二:手动上传:
注意:下面的手动上传方式一定是正确的,前端正确执行以下步骤之后如果上传不成功,请找后端 ,不成功必定是后端怀疑
坚定点 请不要怀疑自己错了,否则你会浪费很多联调时间

三步走:

步骤一:手动提交headers一定是multipart/form-data格式
headers: {
‘Content-Type’: ‘multipart/form-data’,
},

步骤二:
:auto-upload=“false” 必须设置为false
:on-change=“handleFileChange” handleFileChange方法获取提交的数据

步骤三:
(1)创建new FormData 对象
(2)通过append方法提交参数

/*添加对账附件*/
const addAttachment = (params: any) => {
  return request({
    url: '/admin/financeAttachment/importAttachment.do',
    method: 'POST',
    data: params,
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  })
}


<el-upload
            style="width: 100%"
            ref="uploadRef"
            :limit="1"
            :on-change="handleFileChange"
            v-model:file-list="dataForm.fileList"
            accept=".xlsx, .xls"
            :auto-upload="false"
            class="uploadFile"
            :disabled="dataForm.id == '' ? false : true"
          >
            <el-button
              size="middle"
              type="primary"
              v-if="dataForm.id == ''"
              style="margin-top: -105px"
              >点击上传</el-button
            >
          </el-upload>


  const handleFileChange = (file, fileList) => {
    console.log(file, fileList, 'fileList===')
    const isExcel =
      file.raw.type === 'application/vnd.ms-excel' ||
      file.raw.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    if (!isExcel) {
      uploadRef.value?.clearFiles()
      return ElMessage.error('附件不是Excel文档,请重新上传')
    }

    let filename = file.name.substring(0, file.name.lastIndexOf('.'))
    if (filename.length > 30) {
      fileList.value = []
      uploadRef.value?.clearFiles()
      return ElMessage.error('附件的文件名不能超30字,请重新上传')
    }
    uploadFile.value = file
    dataForm.fileList = [
      {
        name: file.name,
        url: '',
      },
    ]

    console.log(uploadFile.value, 'filename===', file.raw)
  }
 清空附件通过调取方法 因为手动赋值为空是不生效的
 
 uploadRef.value?.clearFiles()
-----------------------------------------------------------------------------------------------------------------------
提交
1:new FormData()
2:通过append方法插入参数

const onSubmitForm = async (formEl: FormInstance | undefined) => {
    if (!formEl) return
    let formData = new FormData()
    let dataObj = {
      checkDate: dataForm.checkDate,
      endDate: dataForm.endDate,
      remark: dataForm.remark,
      deadline: dataForm.deadline,
      fileType: dataForm.type,
      fileTypeName: uploadForm.data.name,
    }
    // classifyLists.value.find((item) => item.dicCode == dataForm.type).dicValue
    formData.append('file', uploadFile.value.raw)
    formData.append('checkDate', dataForm.checkDate)
    formData.append('endDate', dataForm.endDate)
    formData.append('deadline', dataForm.deadline)
    formData.append('fileType', dataForm.type)
})

补充:附件必传的校验 易错点:将v-model:file-list=""绑定在 el-form的v-model未包含的数组、

错误写法:
const fileList = ref([]) //


 v-model:file-list="fileList "

正确写法:
const dataForm = reactive({fileList:[]})	
 v-model:file-list="dataForm.fileList"
 
因为el-form绑定的v-model是dataForm 而非fileList 

<el-form size="large" ref="dataFormRef" :model="dataForm" :rules="rules" label-width="80px">
   
        <el-form-item label="附件" prop="fileList">
          <el-upload
            style="width: 100%"
            ref="uploadRef"
            :limit="1"
            :on-change="handleFileChange"
            v-model:file-list="dataForm.fileList"
            accept=".xlsx, .xls"
            :auto-upload="false"
            class="uploadFile"
            :disabled="dataForm.id == '' ? false : true"
          >
            <el-button
              size="middle"
              type="primary"
              v-if="dataForm.id == ''"
              style="margin-top: -105px"
              >点击上传</el-button
            >
          </el-upload>
        </el-form-item>
        </el-form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值