Vue+Flask实现图片传输功能

yizhihongxing

【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技术站

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

相关文章

  • 一文带你学会Python Flask框架设置响应头

    以下是详细的Python Flask框架设置响应头攻略。 什么是响应头? 在HTTP协议中,请求和响应分别由请求头和响应头两部分组成。其中,响应头包含一些元信息,用于描述响应中所包含的实体,如数据类型、编码方式等。 Flask框架设置响应头 在Python Flask框架中,设置响应头非常简单。可以通过Flask框架提供的make_response()函数手…

    Flask 2023年5月16日
    00
  • flask route对协议作用及设计思路

    Flask是一款轻量级的Web框架,它的核心是路由系统,通过路由系统可以灵活地对HTTP协议进行处理。在Flask中使用route装饰器可以创建路由,该装饰器会将函数与指定的URL进行绑定,并根据请求的方法(GET、POST等)选择相应的处理函数。下面将详细介绍route对协议的作用及设计思路。 一、route对协议的作用 在应用Flask时,我们常常需要对…

    Flask 2023年5月16日
    00
  • 在Python的Flask框架中使用日期和时间的教程

    在Python的Flask框架中使用日期和时间,主要可以通过以下步骤来完成: 一、引用flask框架和datetime库 在Python的Flask框架中使用日期和时间时,需要先引用Flask框架和Python自带的datetime库: from flask import Flask, jsonify import datetime 其中,Flask是Pyt…

    Flask 2023年5月15日
    00
  • centos 7.0 使用Nginx部署flask应用教程

    这里是详细的“centos 7.0 使用Nginx部署flask应用教程”的完整攻略,其中包含两个示例说明。 环境准备 在开始我们的攻略之前,请确保你的服务器已经安装了Centos 7.0以及Nginx。 安装Python虚拟环境 我们首先需要创建一个Python虚拟环境,可以使用虚拟环境隔离来自不同项目的Python包。 我们可以使用以下命令安装虚拟环境:…

    Flask 2023年5月15日
    00
  • 打包FlaskAdmin程序时关于static路径问题的解决

    将FlaskAdmin程序打包成一个单独的可执行文件,可以极大地方便运行和分发。但是在打包的过程中常常会遇到static路径的问题。下面是关于解决static路径问题的攻略。 问题描述 在FlaskAdmin程序中,我们通常需要在后台管理页面中使用静态资源。在开发过程中,我们可以使用相对路径(如”./static/js/myscript.js”)来指定静态资…

    Flask 2023年5月16日
    00
  • Python WEB应用部署的实现方法

    Python WEB应用部署的实现方法有很多,这里介绍两种常用的方法:使用Web服务器和使用容器。 使用Web服务器 Web服务器是一种比较传统且常见的部署方式,它的原理是Web服务器作为一个独立的应用程序监听特定的端口,接收HTTP请求并转发给相应的应用程序进行处理。Web服务器通常支持多种环境的应用程序部署,如WSGI、CGI等。 接下来我们以Nginx…

    Flask 2023年5月16日
    00
  • Python利用第三方模块实现压缩css文件

    下面我会详细讲解如何利用第三方模块实现压缩CSS文件的完整攻略。整个过程分为以下几个步骤: 步骤1:安装需要使用的第三方模块 在Python中,要实现CSS文件的压缩,我们需要使用到csscompressor这个第三方模块,因此首先需要用命令行安装该模块。在命令行中输入以下命令: pip install csscompressor 如无意外,安装将成功完成。…

    Flask 2023年5月16日
    00
  • flask框架自定义url转换器操作详解

    下面我将详细讲解 “Flask框架自定义URL转换器操作详解”的完整攻略。 什么是自定义URL转换器? 在Flask框架中,URL转换器是一种将变量转换为特定数据类型的机制。例如,Flask框架提供内置的转换器,如int,float和path等,它们可以将URL参数转换为整数,浮点数和任何非斜杠字符的字符串。 而自定义URL转换器则是我们可以根据自己的需求定…

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