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-ApScheduler快速指南

    来给你详细讲解一下Python下Flask-ApScheduler的完整攻略,包括两条示例说明。 标题:详解Python下Flask-ApScheduler快速指南 介绍 在Python的Web应用程序中,通常需要定期执行一些任务,如数据清理、定期提交数据到第三方API、生成报告等,这时候就需要使用定时任务工具。而Flask-ApScheduler就是这样一…

    Flask 2023年5月15日
    00
  • vue结合el-upload实现腾讯云视频上传功能

    下面我会详细讲解如何结合 Vue 和 el-upload 来实现腾讯云视频上传功能,以及两个示例的具体实现过程。 1. 安装依赖 首先确保已安装 Vue 及 el-upload 组件: # 安装 vue npm install vue # 安装 el-upload npm install element-ui el-upload 2. 引入依赖 在项目的入口…

    Flask 2023年5月16日
    00
  • Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍

    下面给您详细讲解“Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍”的完整攻略。 一对多关系 一对多关系适用于一个模型拥有多个其他模型的实例,但是其他模型的实例只属于一个模型实例。比如一个用户可以拥有多篇文章,但是一篇文章只属于一个用户。 在 Flask sqlalchemy 中可以使用 relationship 属性来建立一对多关系,…

    Flask 2023年5月15日
    00
  • Flask框架之数据交互的实现

    Flask是一款轻巧灵活的Python Web框架,通过Flask框架搭建后端服务可以快速地进行前后端的数据交互。本文将详细讲解Flask框架中数据交互的实现完整攻略,包括使用Flask框架通过GET和POST方式实现前后端数据传递的两个具体示例。 一、GET方式实现数据交互 GET方式是HTTP请求中最常见的一种方式,我们一般通过在URL中进行上传数据来实…

    Flask 2023年5月15日
    00
  • flask开启多线程的具体方法

    下面是关于”flask开启多线程的具体方法”的完整攻略及两条示例说明。 什么是多线程? 在计算机科学中,多线程是指在同一进程内,有多条不同的执行路径。也就是说,一个应用程序可以同时开启多个线程执行多个任务,提高了应用程序的响应速度,提升了用户体验。 Flask如何开启多线程 Flask提供了使用多线程的方法,我们可以使用Python内置的threading模…

    Flask 2023年5月15日
    00
  • Python Web框架Flask下网站开发入门实例

    下面我就详细讲解一下“Python Web框架Flask下网站开发入门实例”的完整攻略。 1. Flask框架介绍 首先,我们来介绍一下Flask框架。Flask是一个轻量级的Python Web框架,可以帮助我们快速地搭建Web应用程序。Flask只提供了基本的构建模块,让我们可以根据自己的需求进行扩展。 2. 安装Flask 在使用Flask之前,我们需…

    Flask 2023年5月15日
    00
  • 微信小程序前端如何调用python后端的模型详解

    “微信小程序前端如何调用python后端的模型”需要通过Web API的方式进行调用。下面是详细的步骤: 步骤1:设计后端Web API 后端Web API实现了模型的调用,并输出模型结果。可以使用Flask或Django等框架来实现Web API。以下是一个用Flask编写的Web API的示例代码: from flask import Flask, re…

    Flask 2023年5月16日
    00
  • 如何使用Cython对python代码进行加密

    使用Cython对Python代码进行加密,通常是通过将Python代码编译为Cython模块,该模块可以加密并保护您的Python代码。下面我们来一步步了解如何使用Cython对Python代码进行加密。 第一步: 安装Cython 在开始使用Cython编译Python代码之前,您需要先安装Cython。您可以使用pip来安装Cython,可以在命令行界…

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