当前位置:   article > 正文

Element-plus之el-upload上传图片后回显,以及将回显的图片再次上传_elementplus 上传文件回显

elementplus 上传文件回显

在实际的业务中往往需要把提交但尚未上传的图片显示回前端,等待上传,以下方法是将提交后的图片回显的方法

  1. <template>
  2. <el-upload
  3. action="/api/imageContainer/saveOrUpdate"
  4. accept="image/bmp,image/jpeg,image/jpg,image/png,image/webp"
  5. :on-change="handleChange"
  6. ref="upload"
  7. name="file"
  8. :show-file-list="false"
  9. :limit = "1"
  10. :on-exceed="handleExceed"
  11. :auto-upload="false"
  12. >
  13. <img v-if="imageContainer.imageUrl" :src="imageContainer.imageUrl" />
  14. <el-icon v-else class="articleImage-uploader-icon"><Plus /></el-icon>
  15. <template #tip>
  16. <div class="el-upload__tip" style="text-align: center;color: rgb(255, 0, 0);">
  17. 只能上传一张小于等于10MB的图片
  18. </div>
  19. </template>
  20. </el-upload>
  21. <el-button type="primary" @click="submitUpload()">确认</el-button>
  22. </template>
  23. <script lang="ts" setup>
  24. const upload = ref<UploadInstance>()
  25. const imageContainer = reactive({
  26. imageUrl: '',
  27. })
  28. /**
  29. * 文件回显
  30. */
  31. const handleChange = (file: any, fileList: any) => {
  32. imageContainer.imageUrl = URL.createObjectURL(file.raw!)
  33. }
  34. /**
  35. * 文件重覆盖
  36. */
  37. const handleExceed: UploadProps['onExceed'] = (files) => {
  38. upload.value!.clearFiles()
  39. const file = files[0] as UploadRawFile
  40. file.uid = genFileId()
  41. upload.value!.handleStart(file)
  42. }
  43. /**
  44. * 文件手动上传
  45. */
  46. const submitUpload = () => {
  47. upload.value!.submit()
  48. }
  49. </script>

 在实际的业务中,有时候会需要将回显后的图片再次上传,此时只需要修改上述的submitUpload()方法即可,取消el-upload的手动提交,改为自己提交请求,代码如下

具体做法是把url转换成blob类型,然后再把blob类型转换成file类型,最后添加进formdata中即可实现上传 

  1. /**
  2. * 上传图片
  3. */
  4. const submitUpload = () => {
  5. //upload.value!.submit() 不使用el-upload提供的手动上传方法
  6. fetch(imageContainer.imageUrl) // 把后端返回的链接转换成blob类型然后再转换成file类型
  7. .then(response => response.blob())
  8. .then(blob => {
  9. const file= new File([blob], 'default.jpg', { type: "image/bmp,image/jpeg,image/png,image/webp" }); // 图片名我用'default.jpg',因为我的后端写了方法重命名
  10. const formData = new FormData();
  11. formData.append('file', file);
  12. axios.post("/api/imageContainer/saveOrUpdate", formData, {
  13. headers: {
  14. 'Content-Type': 'multipart/form-data'
  15. }
  16. })
  17. });
  18. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/lpred/article/detail/62736
推荐阅读
相关标签
  

闽ICP备14008679号