使用Vue3+element-plus的el-upload组件时,点击预览的文件列表下载文件

        在使用el-upload时,点击文件预览列表下载文件的方法:

        这是文件上传的组件,通过绑定:file-list属性来获取文件列表,:on-preview 则绑定文件预览时的事件。

<el-upload
    v-model:file-list="fileList"
    accept=".txt"
    action=""
    disabled
    :on-preview="handlePreviewDownloadFile"
    multiple/>

        通过将文件的内容转化为blob对象从而防止下载的文件出现乱码。然后使用`document.createElement('a');` 这个来创建下载节点。并设置a节点的各个属性。然后将连接加载到dom中。并在下载成功后删除a元素。

const handlePreviewDownloadFile = async (file) => {
  if (file.url != null && file.url !== '') {
    let downloadUrl = file.url;
    try {
      const response = await fetch(downloadUrl);  // 获取文件内容
      if (!response.ok) {
        throw new Error('文件下载失败');
      }
      const blob = await response.blob();  // 将文件内容转换为 Blob 对象
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);  // 创建一个 URL 对象
      link.download = file.name;  // 指定下载的文件名
      document.body.appendChild(link);  // 将链接添加到 DOM 中
      link.click();  // 触发下载
      document.body.removeChild(link);  // 下载后移除 <a> 元素
    } catch (error) {
      message.warning("文件下载失败!");
      console.error(error);
    }
  }
};

 

好的,下面是使用 Vue3+Element-plus 编写图片上传的代码及注释: ```html <template> <div> <el-upload class="avatar-uploader" action="/api/upload" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeAvatarUpload" > <!-- 上传按钮 --> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </template> <script> import { ref } from &#39;vue&#39; export default { name: &#39;AvatarUpload&#39;, setup() { const imageUrl = ref(&#39;&#39;) // 上传前的校验 const beforeAvatarUpload = (file) => { const isJPG = file.type === &#39;image/jpeg&#39; const isPNG = file.type === &#39;image/png&#39; const isLt2M = file.size / 1024 / 1024 < 2 if (!isJPG && !isPNG) { this.$message.error(&#39;上传头像图片只能是 JPG/PNG 格式!&#39;) return false } if (!isLt2M) { this.$message.error(&#39;上传头像图片大小不能超过 2MB!&#39;) return false } return true } // 上传成功的回调 const handleSuccess = (res) => { if (res.code === &#39;200&#39;) { imageUrl.value = res.data.url this.$message.success(&#39;上传成功!&#39;) } else { this.$message.error(&#39;上传失败,请重试!&#39;) } } return { imageUrl, beforeAvatarUpload, handleSuccess } } } </script> <style scoped> .avatar-uploader { display: flex; justify-content: center; align-items: center; width: 120px; height: 120px; border-radius: 50%; border: 1px dashed #ccc; background-color: #f9fafc; cursor: pointer; } .avatar { width: 120px; height: 120px; border-radius: 50%; object-fit: cover; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; } </style> ``` 注释: - `el-upload` 是 Element-plus 中的上传组件,`action` 属性指定上传接口地址,`show-file-list` 属性指定是否显示上传文件列表,`on-success` 属性指定上传成功的回调函数,`before-upload` 属性指定上传前的校验函数; - `img` 标签用于展示上传成功后的图片,属性 `v-if="imageUrl"` 判断 `imageUrl` 是否存在,如果存在则显示图片,否则显示上传按钮; - `i` 标签用于显示上传按钮,属性 `v-else` 表示如果 `imageUrl` 不存在,则显示按钮; - `ref` 是 Vue3 中用于创建响应式数据的方法; - `beforeAvatarUpload` 方法用于上传前的校验,判断文件类型和大小是否符合要求; - `handleSuccess` 方法用于上传成功的回调,在回调中将上传成功的图片地址赋值给 `imageUrl`,并提示上传成功; - `setup` 函数是 Vue3 中的新特性,用于组件的选项设置,返回一个对象,包含组件中需要用到的数据和方法; - `return` 中的数据和方法,会被 Vue3 自动注入到组件的模板中使用- `style` 标签的 `scoped` 属性表示样式仅作用于当前组件中的元素,不会影响到其他组件的样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值