Vue+Flask实现图片传输功能

【Vue+Flask实现图片传输功能】

本攻略将分为两条示例来详细讲解如何使用Vue和Flask实现图片传输功能。

【示例一】

在本例中,我们将使用Flask作为后端,使用Vue作为前端,来实现图片上传和展示功能。

  1. 前端Vue代码

首先,在Vue的模板中添加一个上传文件的input标签和一个展示图片的img标签,如下所示:

<template>
  <div>
    <input type="file" @change="handleFileChange">
    <br>
    <img :src="imageUrl" v-if="imageUrl">
  </div>
</template>

其中,@change方法用于监听文件上传事件,handleFileChange方法用于处理图片上传文件,并通过Vue的data数据绑定方式将上传的图片赋值给imageUrl,通过v-if控制是否展示图片。

  1. 前端Vue脚本代码

在Vue的脚本代码中实现图片上传和展示的逻辑,如下所示:

<script>
export default {
  data() {
    return {
      imageUrl: '',
    };
  },
  methods: {
    handleFileChange(e) {
      const file = e.target.files[0];
      const reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = () => {
        this.imageUrl = reader.result;
        this.uploadImage(file);
      };
    },
    uploadImage(file) {
      const formData = new FormData();
      formData.append('file', file);
      axios.post('/upload', formData, {
        headers: { 'content-type': 'multipart/form-data' },
      }).then((res) => {
        console.log(res);
      }).catch((err) => {
        console.log(err);
      });
    },
  },
};
</script>

其中,handleFileChange方法中使用FileReader读取上传的图片文件并将结果赋值给imageUrl,并调用uploadImage方法将图片上传给后端;uploadImage方法中将图片以FormData的形式封装,并通过axios发送post请求将图片上传到后端。

  1. 后端Flask代码

在Flask中实现图片上传和展示的逻辑,如下所示:

from flask import Flask, request, jsonify, send_from_directory
from werkzeug.utils import secure_filename
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = './uploads'
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/upload', methods=['POST'])
def upload():
    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({'filename': filename})
    else:
        return jsonify({'error': 'Invalid file format'})

@app.route('/uploads/<filename>')
def send_image(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    app.run()

其中,ALLOWED_EXTENSIONS用于限制上传的文件格式,allowed_file函数用于判断上传的文件格式是否符合要求;upload路由接口用于接收前端上传的图片文件,并将文件保存到本地UPLOAD_FOLDER目录;send_image路由接口用于将保存在本地的图片文件发送给前端展示。

【示例二】

在本例中,我们将使用Flask作为前端和后端的桥梁,来实现图片上传和展示功能。

  1. 前端Vue使用axios请求上传图片

首先,在前端Vue组件中使用axios请求上传图片,在上传文件时,设置axios请求的头部为multipart/form-data,将图片文件通过FormData传输给后端:

axios.post('/api/file', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
  .then(response => {
    // 上传成功处理
  }).catch(error => {
    // 上传失败处理
  });
  1. 后端Flask接收并存储图片

使用Flask框架中的request.files.get()方法在后端接收前端传过来的图片文件,并将其保存到本地:

from flask import Flask, request
import os

app = Flask(__name__)

@app.route('/api/file', methods=['POST'])
def upload_file():
    file = request.files.get('file')
    if file:
        file.save(os.path.join('static', file.filename))
        return 'success'
    else:
        return 'error'

其中,os.path.join()函数用于拼接存储路径和文件名称,将文件存储到服务器的static目录下。存储成功后返回success,否则返回error。

  1. 前端Vue展示上传的图片

首先,在前端Vue组件中定义一个img元素用于展示上传的图片:

<template>
  <div>
    <input type="file" @change="uploadFile">
    <img :src="imageUrl" v-show="imageUrl">
  </div>
</template>

然后在Vue的script中调用Flask服务中的图片路径:

<script>
  export default {
    data() {
      return {
        imageUrl: ''
      };
    },
    methods: {
      getImageUrl(filename) {
        return `/static/${filename}`;
      },
      uploadFile(e) {
        var file = e.target.files[0];
        if (!file) return;
        var formData = new FormData();
        formData.append('file', file);
        axios.post('/api/file', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
          .then(response => {
            this.imageUrl = this.getImageUrl(file.name); // 获取图片路径
          }).catch(error => {
            console.log(error)
          });
      }
    }
  }
</script>

其中,getImageUrl用于将Flask服务中的图片路径传给前端Vue组件;uploadFile用于上传文件,并将图片路径赋值给imageUrl,控制前端的img标签的展示。

【总结】

通过以上两个例子的介绍,我们可以了解到Vue和Flask都是非常优秀的前后端开发框架,结合使用可以为我们的项目提供很多便利,为用户提供更加良好的使用体验。在实际开发中,应根据具体的需求综合考虑各种技术手段的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue+Flask实现图片传输功能 - Python技术站

(1)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • python:动态路由的Flask程序代码

    我将为您详细讲解“python:动态路由的Flask程序代码”的完整攻略。在本攻略中,我们将以 Flask 框架为基础,使用 Python 语言开发一个具备动态路由功能的 Web 应用程序。 准备工作 在开始编写 Flask 程序之前,我们需要安装 Flask 并导入所需的模块。可以使用 Pip 工具来安装 Flask: pip install Flask …

    Flask 2023年5月15日
    00
  • 详解python logging日志传输

    下面我将为你详细讲解“详解Python logging日志传输”的完整攻略,包含两条示例说明。 概述 Python中的logging模块提供了强大的日志记录功能,可以对不同等级的日志进行分类,方便后期调试和问题排查。然而,在一个分布式系统中,不同的组件可能运行在不同的机器上,这时候将分散的日志收集起来就变得尤为重要。Python logging模块提供了So…

    Flask 2023年5月16日
    00
  • 爬虫训练前端基础Bootstrap5排版表格图像

    下面是爬虫训练前端基础Bootstrap5排版表格图像的完整攻略,这里会包含两条示例说明。 Bootstrap5简介 Bootstrap是一套开源工具集,其中包括用于快速应用程序开发的HTML、CSS和JavaScript的框架。Bootstrap由Twitter的Mark Otto和Jacob Thornton在2010年兴起,是目前最受欢迎的前端框架之一…

    Flask 2023年5月16日
    00
  • 详解python开发环境搭建

    详解Python开发环境搭建 在开始Python开发之前,需要先搭建好Python的开发环境。本文将详细讲解Python开发环境的搭建过程。 安装Python 首先,需要安装Python。可以去Python官网下载安装包,选择对应的版本(Python2或Python3),然后按照安装向导完成安装。 安装代码编辑器 安装完Python之后,需要安装一个代码编辑…

    Flask 2023年5月16日
    00
  • 全面了解Nginx, WSGI, Flask之间的关系

    全面了解Nginx、WSGI和Flask之间的关系包括以下几个方面: 一、Nginx是什么? Nginx是一款高性能的Web服务器和反向代理服务器,由Igor Sysoev创造,并于2004年首次发布,官方网站:https://nginx.org/. Nginx可以作为一个HTTP服务器,也可以在前面设置HTTP服务器的反向代理服务器,它可以作为Apache…

    Flask 2023年5月16日
    00
  • Flask项目的部署的实现步骤

    一、Flask项目的部署实现步骤 Flask是一个轻量级的Python Web框架,部署一个Flask应用涉及到的步骤通常包括以下几个方面: 1. 配置服务器环境因为Flask要运行在服务器上,所以必须要先确保服务器环境符合Flask运行的要求,包括搭建有效的Python环境、配置Web服务器等。 2. 安装Flask在服务器上安装Flask库,可以利用pi…

    Flask 2023年5月15日
    00
  • Flask教程之重定向与错误处理实例分析

    针对这个主题,我将提供如下完整攻略: Flask教程之重定向与错误处理实例分析 一、重定向 1. 为什么需要重定向 在Web开发中,有很多场景需要将用户重定向到另一个地址,比如: 当用户登录成功后需要重定向到主页 用户访问未登录的页面需要重定向到登录页面 用户输入错误的URL需要重定向到404页面 那么Flask中如何实现重定向呢? 2. Flask中的重定…

    Flask 2023年5月15日
    00
  • flask上使用websocket的方法示例

    下面是关于“flask上使用websocket的方法示例”的完整攻略。 什么是WebSocket? WebSocket是一种基于TCP协议的新型网络通信协议,相比HTTP协议,它具有以下优点: 长连接:WebSocket是一种长连接,可以实时的双向通讯,我们不需要反复的建立连接和释放连接,节省了很多浏览器和服务器的开销。 实时性:WebSocket具有实时通…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部