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 http通信接口开发示例

    下面将详细讲解“python http通信接口开发示例”的完整攻略,包含两条示例说明。 示例一:Python实现简单的HTTP GET请求 1. 安装requests库 我们使用 requests 库来发送 http 请求。在 Windows 系统下,可以在命令行中执行以下命令安装: $ pip install requests 在 Linux 或 macO…

    Flask 2023年5月16日
    00
  • Python写一个简单的api接口的实现

    下面我来详细讲解如何用Python编写一个简单的API接口。 首先,我们需要确定我们要提供的API接口的功能和参数。在代码编写之前,需要进行接口设计,包括接口的输入参数、输出内容类型以及接口地址等等。 接着,我们需要选用一个Web框架来实现API接口。这里我们以Flask框架为例。Flask是一个开源的Python Web框架,具有轻量级、易学易用等优点,非…

    Flask 2023年5月16日
    00
  • Flask框架编写文件下载接口过程讲解

    以下是关于Flask框架编写文件下载接口的完整攻略: 1. 准备工作 在开始编写文件下载接口之前,需要先准备好Flask框架及相关依赖。可以通过以下代码安装所需依赖: pip install flask pip install -U flask-cors 在准备工作完成之后,我们需要按照以下步骤进行文件下载接口的编写。 2. 示例一:下载指定路径文件 接下来…

    Flask 2023年5月16日
    00
  • 在flask中使用python-dotenv+flask-cli自定义命令(推荐)

    首先,需要说明的是,在Flask中使用python-dotenv和flask-cli自定义命令可以使我们的开发更加便利和高效。具体的步骤和过程如下: 1. 安装python-dotenv和flask-cli 在终端中执行以下命令来分别安装python-dotenv和flask-cli: pip install python-dotenv pip instal…

    Flask 2023年5月15日
    00
  • Python Type Hints 学习之从入门到实践

    下面是详细讲解“Python Type Hints 学习之从入门到实践”的完整攻略: Python Type Hints 学习之从入门到实践 什么是 Python Type Hints Python 从 3.5 版本开始引入了 Type Hints 的概念,它是一种用于标注函数、变量、类等对象类型的注释。Python 并不会在运行时对其进行强制校验,但是可以…

    Flask 2023年5月16日
    00
  • python的flask框架难学吗

    Python的Flask框架是一个用于web应用程序开发的微框架,它拥有简洁的代码结构,易于学习和使用。而对于初学者而言,学习一门新技术是有难度的,但对于Flask框架而言,它并不难学。下面,我将为您提供详细的攻略。 一、Flask框架的安装 Flask框架的安装十分便捷,您可以通过以下命令行进行Flask框架的安装: pip install Flask 在…

    Flask 2023年5月16日
    00
  • Python webargs 模块的简单使用

    Python webargs 模块是一个用于验证和从请求中提取参数的工具包。它有助于在开发 Web 应用时处理复杂的查询参数,并提供了一个简单的解决方案来处理数据验证和转换。 安装 webargs 可以通过 pip 安装: pip install webargs 基本用法 引入 webargs: from webargs import fields from…

    Flask 2023年5月15日
    00
  • Python通过四大 AutoEDA 工具包快速产出完美数据报告

    下面我将详细讲解“Python通过四大 AutoEDA 工具包快速产出完美数据报告”的完整攻略,包括两个示例说明。 什么是AutoEDA AutoEDA,即自动探索性数据分析,是一种利用机器学习和人工智能技术来自动分析和解释数据的方法。常用于数据可视化、数据预处理、特征选择和模型评估等领域。 四大AutoEDA工具包介绍 四大AutoEDA工具包分别为:Pa…

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