element-plus 上传组件(http-request 覆盖)

1. upload.js

export const upload = data => request({
    url:'https://up-z1.qiniup.com',
    method:"post",
    data
})

2. App.vue

<template>
  <div class="app">
    <!-- 覆盖默认的上传行为 -->
    <el-upload
      class="upload-demo"
      drag
      action=""
      :http-request="uploadFile"
      v-if="!data.url"
    >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
    </el-upload>

    <div style="margin-top: 150px">
      <img
        :src="data.url"
        alt=""
        style="width: 500px; border: 1px dashed rgba(0, 0, 0, 0.2)"
        @click="data.url = ''"
      />
      <p>{{ data.url }}</p>
    </div>
  </div>
</template>

<script>
import { reactive } from "@vue/reactivity";
import { getUploadToken } from "@/apis/token";
import { upload } from "@/apis/upload";
import { onMounted } from "@vue/runtime-core";
export default {
  setup() {
    let data = reactive({
      params: {
        token: ``,
      },
    });
    // 上传成功后操作
    let uploadSuccess = (res) => {
      data.url = `http://img.gkh0305.top/${res.key}`;
    };
    // 获取上传凭证
    async function getToken() {
      let res = await getUploadToken();
      if (res) {
        data.params.token = res.data.token;
      }
    }
    // 重写上传程序
    async function uploadFile(params) {
      var { file } = params;
      var formData = new FormData();
      formData.append("token", data.params.token);
      formData.append("file", file);
      let res = await upload(formData);
      if (res) {
        uploadSuccess(res.data);
      }
    }
    onMounted(() => {
      getToken();
    });
    return {
      data,
      uploadSuccess,
      uploadFile,
    };
  },
};
</script>

<style lang="scss">
.app {
  height: 100vh;
  text-align: center;
  color: #5b5b5b;
  .el-upload {
    margin-top: 150px;
  }
}
</style>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Vue3中使用Element Plus进行附件上传,可以按照以下步骤进行操作: 1. 首先,需要安装Element Plus和axios插件: ``` npm install element-plus axios ``` 2. 在Vue项目的main.js文件中引入Element Plus和axios: ```javascript import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import axios from 'axios' import App from './App.vue' const app = createApp(App) app.use(ElementPlus) app.config.globalProperties.$axios = axios app.mount('#app') ``` 3. 在需要上传附件的组件中,可以使用Element Plus提供的el-upload组件进行上传,同时利用axios发送上传请求: ```vue <template> <el-upload class="upload-demo" action="/api/upload" :on-change="handleChange" :before-upload="beforeUpload" :file-list="fileList" multiple :limit="3" :on-exceed="handleExceed" :headers="headers"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </template> <script> export default { data() { return { fileList: [], headers: { Authorization: 'Bearer ' + localStorage.getItem('token'), }, } }, methods: { handleChange(file, fileList) { console.log(file, fileList) }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' const isLt500K = file.size / 1024 < 500 if (!isJPG) { this.$message.error('上传头像图片只能是 JPG/PNG 格式!') } if (!isLt500K) { this.$message.error('上传头像图片大小不能超过 500KB!') } return isJPG && isLt500K }, handleExceed(files, fileList) { this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${fileList.length + files.length} 个文件`) }, }, } </script> ``` 4. 在后端接口中,需要处理上传请求,并返回上传成功的信息: ```python @app.route('/api/upload', methods=['POST']) def upload_file(): if request.method == 'POST': file = request.files['file'] if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) return jsonify({'success': True, 'filename': filename}) return jsonify({'success': False}) ``` 其中,`allowed_file`函数可以用来限制上传文件的格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值