Element를 사용하여 vue에 파일 구성 요소를 업로드하고 업로드 방법을 사용자 정의합니다.

서문: 최근 Vue 프로젝트에 접하게 되어 Element Plus를 사용하고 있는데 말로 설명하기는 힘들지만 이 컴포넌트 라이브러리는 저에게 적합하지 않다고 느꼈습니다. 이 장에서는 요소의 업로드 파일 구성 요소를 사용하는 방법을 간략하게 안내합니다.

1. 완전한 코드, 코드에 많은 설명이 있습니다.

소개 예:

 소개 후의 전체 코드:

<!--html 代码-->
<el-upload   
      ref="upload" 
<!-- 必填 注释需要删除-->
     action="#"  
     list-type="picture-card"
<!--文件个数限制  注释需要删除-->
     :limit="1"  
<!--自定义上传方法  注释需要删除-->
     :http-request="httpRequest" 
<!--超出上传个数之后的方法  注释需要删除-->
     :on-exceed="handleExceed" > 
              <el-icon>
                <Plus />
              </el-icon>
              <template #file="{ file }">
                <div>
                  <img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
                  <span class="el-upload-list__item-actions">
                    <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
                      <el-icon><zoom-in /></el-icon>
                    </span>
                    <span  class="el-upload-list__item-delete" @click="handleDownload(file)">
                      <el-icon>
                        <Download />
                      </el-icon>
                    </span>
                    <span class="el-upload-list__item-delete" @click="handleRemove(file)">
                      <el-icon>
                        <Delete />
                      </el-icon>
                    </span>
                  </span>
                </div>
              </template>
            </el-upload>
 <el-dialog v-model="dialogVisible">
              <img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>


// js 代码 这里的引入可能不全,大家用的时候自己再引入就是
import { genFileId, UploadInstance,   UploadProps, UploadRawFile } from 'element-plus'

const dialogImageUrl = ref('')
const dialogVisible = ref(false)
const disabled = ref(false)
let imageUrl:any=''

//自定义上传
function httpRequest(file:any) {
      // 创建 FormData 对象
      const formData :any= new FormData();
      // 将文件添加到 FormData 中
       formData.append('file', file?.file);
      //接口方法,请替换成实际的方法和返回的值 
      uploadPicture(formData).then((res)=>{
        imageUrl=res?.p2pdata
        console.log('uploadPicture1',res?.p2pdata)
      })
      // 返回的文件也可以加在请求方法之后
      return file
    };
//删除已上传的文件,内容自填
const handleRemove = (file:any) => {
  console.log(file)
}
//预览放大 可以不动
const handlePictureCardPreview = (file:any) => {
  dialogImageUrl.value = file.url!
  dialogVisible.value = true
}
//下载  内容自填
const handleDownload = (file:any) => {
 console.log(file)
}

const upload = ref<UploadInstance>()
//超出限制长度时触发替换方法  可不动
const handleExceed: UploadProps['onExceed'] = (files) => {
  upload.value!.clearFiles()
  const file = files[0] as UploadRawFile
  file.uid = genFileId()
  upload.value!.handleStart(file)
}

효과를 얻다

2. 이상상황에 대한 기록

① 자동 업로드로 인해 사용자 정의 업로드가 유효하지 않게 되고 인터페이스가 전혀 트리거되지 않습니다.

파일을 자동으로 업로드하려면 자동 업로드 값을 true로 설정하십시오. 그렇지 않으면 인터페이스 요청이 트리거되지 않습니다.

②인터페이스 요청 오류 현재 요청은 멀티파트 요청이 아닙니다. 또는 기타 요청 오류.

대부분 인터페이스의 요청 헤더가 설정되지 않았기 때문에 요청 헤더를 추가하세요.

콘텐츠 유형: 다중 부분/양식 데이터;

 

 

③ 두 번째 업로드된 파일은 첫 번째 파일을 덮어쓰지 않습니다.

수입 시 구성요소 태그에 해당 구성요소가 표시되어 있는지 확인하시기 바랍니다.

ref="upload" 

추천

출처blog.csdn.net/youyudehan/article/details/132513781