ElementUI上传组件el-upload自定义http-request上传到Flask服务

简介: ElementUI上传组件el-upload自定义http-request上传到Flask服务

项目准备

$ vue init webpack-simple vue-demo
$ cd vue-demo && cnpm i
cnpm i element-ui axios -S

前端代码如下

<template>
  <div id="app">
    <el-upload ref="upload"
      action="action"
      :show-file-list="false"
      :http-request="uploadFile">
      <el-button>上传</el-button>
    </el-upload>
    <img v-if="imageUrl"
      :src="imageUrl"
      alt="">
  </div>
</template>
<script>
import axios from "axios";
export default {
  name: "app",
  data() {
    return {
      imageUrl: "",
    };
  },
  methods: {
    async uploadFile(params) {
      let form = new FormData();
      form.append("file", params.file);
      const res = await axios.post("http://127.0.0.1:5000/upload", form);
      console.log(res);
      this.imageUrl = res.data;
    },
  },
};
</script>

file对象可以直接上传到服务器image.png

使用Flask写的临时的文件上传后台服务代码如下

# -*- coding: utf-8 -*-
import os
from urllib.parse import urljoin
from flask import Flask, request, send_from_directory
from flask_cors import CORS
import uuid
app = Flask(__name__)
CORS(app, supports_credentials=True)
######################
# 配置文件
######################
UPLOAD_FOLDER = 'uploads'
if not os.path.isdir(UPLOAD_FOLDER):
    os.mkdir(UPLOAD_FOLDER)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# 允许的扩展名
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
# 1M
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024
# 检查后缀名是否为允许的文件
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
# 获取文件名
def random_filename(filename):
    ext = os.path.splitext(filename)[-1]
    return uuid.uuid4().hex + ext
# 上传文件
@app.route("/upload", methods=['POST'])
def upload():
    file = request.files.get('file')
    if file and allowed_file(file.filename):
        print(file.filename)
        filename = random_filename(file.filename)
        filepath = os.path.join(UPLOAD_FOLDER, filename)
        file.save(os.path.join(app.root_path, filepath))
        file_url = urljoin(request.host_url, filepath)
        return file_url
    return "not allow ext"
# 获取文件
@app.route('/uploads/<path:filename>')
def get_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
    app.run(debug=True)
相关文章
|
前端开发 JavaScript 安全
【前端相关】elementui使用el-upload组件实现自定义上传
【前端相关】elementui使用el-upload组件实现自定义上传
3164 0
|
存储 移动开发 JavaScript
H5加载Android本地路径图片
H5加载Android本地路径图片
1555 0
|
2月前
|
人工智能 Cloud Native 自然语言处理
拔俗AI智能体服务开发:你的7x24小时数字员工,让企业效率飙升的秘密武器
在“人效为王”时代,企业面临服务响应慢、成本高、协同难等痛点。阿里云AI智能体以自主决策、多模态交互、持续学习三大引擎,打造永不疲倦的“数字员工”,实现7×24小时高效服务,助力企业降本增效、驱动创新增长。(238字)
|
6月前
|
存储 安全 前端开发
SpringBoot阿里云OSS文件上传实例
本文介绍了通过阿里云OSS实现用户头像上传的功能。首先概述了OSS的特点,如高持久性、RESTful API支持及多种存储类型。接着详细描述了前期准备步骤,包括注册阿里云账号、实名认证、开通OSS服务、创建Bucket及AccessKey。注意事项中提到需调整Bucket的访问权限以支持前端访问。最后提供了基于SpringBoot的代码实现,包含配置文件与上传工具类的编写,帮助开发者快速集成OSS文件上传功能。
1399 1
SpringBoot阿里云OSS文件上传实例
|
前端开发 UED
使用HTML和CSS创建响应式表格
在网页设计中,表格是一种组织和展示数据的有效方式。本文档将指导你如何使用HTML和CSS来创建一个既美观又响应式的表格,以便在不同设备和屏幕尺寸上都能良好显示。我们将涵盖基础的HTML表格结构,样式美化以及如何实现响应式布局,使得表格内容在小屏设备上也能清晰阅读
645 0
|
机器学习/深度学习 人工智能 算法
机器学习中的元强化学习
元强化学习是强化学习与元学习的交叉领域,旨在通过迁移已有知识来提升新任务上的学习效率。
390 2
|
SQL 大数据 程序员
聊聊 SQL 语句中的占位符
大家都知道,在 SQL 语句中,可以使用 LIKE 进行模糊查询,但可能大家不知道的是,LIKE 语句的占位符除了 % 占位符之外,还有 _ 占位符,理解这些占位符可以帮助我们更有效地构造查询并进行字符串匹配,提高程序性能
935 0
|
数据采集 JavaScript 前端开发
Puppeteer-py:Python 中的无头浏览器自动化
Puppeteer-py:Python 中的无头浏览器自动化
|
前端开发 安全 Java
实现Spring Boot中的文件分片上传通常涉及到以下几个步骤和考虑的关键点
实现Spring Boot中的文件分片上传通常涉及到以下几个步骤和考虑的关键点
798 2
|
机器学习/深度学习 算法