element-ui的Upload上传中action发送请求的问题

本文介绍如何使用Vue框架实现资源上传功能,包括设置上传URL、处理token失效问题、阻止自动上传及手动提交等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:(post请求)
在这里插入图片描述
问题:
1、action必填项
2、token失效
3、请求两次

解决如下:

<template>
  <div>
    <el-form  label-width="80px">
      <el-form-item label="资源上传:">
        <el-upload
          class="upload-demo"
          ref="upload"
          :action="uploadUrl()"//获取url
          :headers="{Token: token}" //传递token的方式
          :on-preview="handlePreview"
          :on-remove="handleRemove"
          :data="{description:ruleForm.description,type:ruleForm.type}" //data传递其他参数,对象中的值是key:value模式
          :auto-upload="false"//阻止自动上传图片
          >
          <el-button size="small" type="primary">点击上传</el-button>
        </el-upload>
        </el-form-item>
        <el-form-item>
	        <el-button type="primary">取消</el-button>
	        <el-button @click="submitUpload">确认</el-button>//手动提交
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
import store from '@/store'
export default {
  data() {
      return {
        token: store.getters.token //获取token
      }
    },
    methods:{
    //action的url
      uploadUrl(){
        return `${process.env.VUE_APP_BASE_API}/resource/add`//需要区分环境所以用process.env.VUE_APP_BASE_API获取基本域名/ip
      },

      //上传提交
      submitUpload() {
        this.$refs.upload.submit();
      },
      handlePreview(file) {
        console.log('=====',file);
      },
      handleRemove(file) {
        console.log(file);
      },
    }
}
</script>





Element-UIUpload组件主要用于处理文件上传,包括图片、文本等常见格式。如果你想要手动上传Excel文件,你可以按照以下步骤操作: 1. 首先,你需要安装Element-UI以及相关的文件上传插件,如`axios`用于发送HTTP请求,因为`element-upload`本身并不直接支持上传Excel文件。 ```bash npm install element-ui axios ``` 2.Vue项目中引入Element-UIUpload组件: ```html <template> <el-upload :action="uploadUrl" :on-change="handleChange" :file-list="fileList" accept=".xls,.xlsx" <!-- 表示接受.xls和.xlsx类型的文件 --> > <i class="el-icon-upload"></i> 点击<em>上传</em> </el-upload> </template> <script> import axios from 'axios'; export default { components: { ElUpload }, data() { return { fileList: [], uploadUrl: 'your-api-url-to-upload', // 替换为你实际的上传接口地址 }; }, methods: { handleChange(file) { if (!file.type.includes('application/vnd.ms-excel')) { this.$message.error('只支持Excel文件'); return; } const reader = new FileReader(); reader.onload = (e) => { axios.post(this.uploadUrl, e.target.result, { headers: { 'Content-Type': 'multipart/form-data' } }) .then(response => { console.log('上传成功:', response); // 更新文件列表或处理服务器响应 }) .catch(error => { console.error('上传失败:', error); }); }; reader.readAsArrayBuffer(file); } } }; </script> ``` 在这个例子中,当用户选择一个Excel文件后,`handleChange`方法会读取文件内容,并使用axios发送POST请求到指定的API。注意,由于浏览器安全限制,`FileReader` API只能读取二进制数据,所以我们需要设置`Content-Type`为`multipart/form-data`以便于服务器识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值