vue3-ElementPlus上传&下载文件【代码】

上传

<template>
  <el-upload ref="upload" :auto-upload="false" accept="" :show-file-list='false' :on-change="handleChangeUpload"
    action="#" class="upload-demo" multiple>
    <el-button type="primary">Click to upload</el-button>
  </el-upload>
</template>

<script setup>
import { onMounted, onUnmounted, reactive, toRefs, watch, onActivated } from 'vue'
// import { fileUpload } from '@/api/grid/common'
function handleChangeUpload(file) {
  let formData = new FormData()
  formData.append('文件', file.raw)
  fileUpload(formData).then(res => {//fileUpload换成你自己接口
    if (res.code == '200') {
      ElMessage({
        type: 'success',
        message: '上传成功',
      })
    } else {
      ElMessage.error(res.message)
    }
    // console.log(res);
  }).finally()
}
</script>
<el-upload
  ref="upload"
  :limit="1"
  accept=".jpg, .png"
  :action="upload.url"
  :headers="upload.headers"
  :file-list="upload.fileList"
  :on-progress="handleFileUploadProgress"
  :on-success="handleFileSuccess"
  :auto-upload="false">
  <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  <el-button style="margin-left: 10px;" size="small" type="success" :loading="upload.isUploading" @click="submitUpload">上传到服务器</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>

<script>
// 上传参数
upload: {
  // 是否禁用上传
  isUploading: false,
  // 设置上传的请求头部
  headers: { Authorization: "Bearer " + getToken() },
  // 上传的地址
  url: process.env.VUE_APP_BASE_API + "/common/upload",
  // 上传的文件列表
  fileList: []
},
</script>

下载

<el-button
  size="mini"
  type="text"
  icon="el-icon-edit"
  @click="handleDownload(scope.row)"
>下载</el-button>

<script>
// 文件下载处理
handleDownload(row) {
  var name = row.fileName;
  var url = row.filePath;
  var suffix = url.substring(url.lastIndexOf("."), url.length);
  const a = document.createElement('a')
  a.setAttribute('download', name + suffix)
  a.setAttribute('target', '_blank')
  a.setAttribute('href', url)
  a.click()
}
</script>
### Vue3ElementPlus 实现多文件上传功能的方法 在 Vue3ElementPlus 中实现多文件上传功能,可以通过 `&lt;el-upload&gt;` 组件来完成。此组件提供了丰富的 API 以支持多文件选择、自定义上传逻辑等功能[^3]。 以下是实现多文件上传功能的具体方法和代码示例: #### 1. 基本配置 通过设置 `&lt;el-upload&gt;` 的 `multiple` 属性为 `true`,可以允许用户同时选择多个文件进行上传[^3]。 ```vue &lt;template&gt; &lt;el-upload action=&quot;https://jsonplaceholder.typicode.com/posts/&quot; multiple :on-success=&quot;handleSuccess&quot; :before-upload=&quot;beforeUpload&quot;&gt; &lt;el-button type=&quot;primary&quot;&gt;点击上传&lt;/el-button&gt; &lt;/el-upload&gt; &lt;/template&gt; ``` #### 2. 自定义上传逻辑 如果需要自定义上传逻辑(例如使用 Axios 或其他方式),可以将 `:auto-upload` 设置为 `false` 并手动触发上传操作。 ```vue &lt;template&gt; &lt;el-upload ref=&quot;uploadRef&quot; :auto-upload=&quot;false&quot; multiple :on-change=&quot;handleChange&quot; :file-list=&quot;fileList&quot;&gt; &lt;el-button slot=&quot;trigger&quot; type=&quot;primary&quot;&gt;选取文件&lt;/el-button&gt; &lt;el-button type=&quot;success&quot; @click=&quot;submitUpload&quot;&gt;上传到服务器&lt;/el-button&gt; &lt;/el-upload&gt; &lt;/template&gt; &lt;script&gt; import axios from &#39;axios&#39;; export default { data() { return { fileList: [] }; }, methods: { handleChange(file, fileList) { this.fileList = fileList; }, submitUpload() { const formData = new FormData(); this.fileList.forEach(file =&gt; { formData.append(&#39;files&#39;, file.raw); }); axios.post(&#39;https://jsonplaceholder.typicode.com/posts/&#39;, formData, { headers: { &#39;Content-Type&#39;: &#39;multipart/form-data&#39; } }).then(response =&gt; { console.log(&#39;上传成功:&#39;, response); }).catch(error =&gt; { console.error(&#39;上传失败:&#39;, error); }); } } }; &lt;/script&gt; ``` #### 3. 关于 `FormData` `FormData` 是一种用于构造键值对数据的接口,通常用于发送表单数据[^1]。在多文件上传中,可以通过 `formData.append(key, value)` 方法将每个文件添加到 `FormData` 对象中。 - **创建 FormData**:`const formData = new FormData();` - **添加文件**:`formData.append(&#39;key&#39;, file);` - **发送请求**:通过 Axios 或其他 HTTP 客户端发送 `FormData` 数据[^1]。 #### 4. 性能与注意事项 - 确保服务器端能够接收并处理多文件上传- 如果文件较大,可以考虑分片上传技术[^2]。 -前端校验文件大小和类型,避免无效文件上传---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚哒老虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值