Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存

简介: 关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。

1.什么是Flask

  • Flask是一个基于python开发并依赖于 jinja2 模板和 werkzeug WSGI 服务器的一个微型框架。
  • 而werkzeug本质上是一个 socket 服务端,用于接收浏览器发送过来的请求,并进行预处理,然后再触发flask,这个时候我们就通过flask给我们提供的功能去对浏览器发送的请求做一个处理,当要处理的文件相对比较复杂时,则需要通过jinja2模板来处理,也就是我们常说的 渲染 ,之后再把处理过的数据返回给浏览器

学习链接

2.通过Flask上传图片到服务器端(以原名保存)

server.py

from flask import request
from flask import Flask
import json
import numpy as np

import cv2
import base64
from gevent.pywsgi import WSGIServer

app = Flask(__name__)

# 定义路由
@app.route("/photo", methods=['POST'])
def get_frame():
    # 接收图片
    # upload_file = json.loads(request.json)
    # print(upload_file['file'])
    # upload_file=request.form['file']
    filename=request.get_json()
    print(filename)
    # print(type(filename)=='str')

    if (isinstance(filename,str)):
        filname1=json.loads(filename)
        tmp=filname1['file']
        name=filname1['name']
        img = base64.b64decode(str(tmp))
        image_data = np.fromstring(img, np.uint8)
        image_data = cv2.imdecode(image_data, cv2.IMREAD_COLOR)
        cv2.imwrite('F:/pycharm/feature_match/face_result/{}'.format(name), image_data)
    else:
        tmp=filename['file']
        img = base64.b64decode(str(tmp))
        image_data = np.fromstring(img, np.uint8)
        image_data = cv2.imdecode(image_data, cv2.IMREAD_COLOR)
        cv2.imwrite('F:/pycharm/feature_match/face_result/1.jpg', image_data)
    # fff=json.load(filename)
    # print(upload_file)
    # img=cv2.imread(tmp)
    # cv2.imwrite("222.jpg",img)
    # print(className,prob)
    json_info = json.dumps(dic, ensure_ascii=False)
    return json_info

if __name__ == "__main__":
    dic = {}
    app.run(host='10.16.55.26',port=9000)
    ## Serve the app with gevent
    # http_server = WSGIServer(('0.0.0.1',5000),app)
    # http_server.serve_forever()

client.py

import requests
import base64,glob
import json,cv2,os
import numpy as np
# API地址
url = "http://10.16.55.26:9000/photo"

# opencv读取出来的图片相当于numpy数组
def cv2_to_base64(image):
    image1 = cv2.imencode('.jpg', image)[1]
    image_code = str(base64.b64encode(image1))[2:-1]
    return image_code

def base64_to_cv2(image_code):
    #解码
    img_data=base64.b64decode(image_code)
    #转为numpy
    img_array=np.fromstring(img_data,np.uint8)
    #转成opencv可用格式
    img=cv2.imdecode(img_array,cv2.COLOR_RGB2BGR)
    return img
# with open(r'D:\pycharm\car_fee_system\images\result\2.jpg', 'rb') as f:
#     img = base64.b64encode(f.read()).decode()
path=r'D:\pycharm\car_fee_system\images\result/'
images_paths = glob.glob(os.path.join(path + '*.jpg')) #*.jpg中的*,表示能匹配多个字符
for images_path in images_paths:
    a,b= os.path.splitext(os.path.split(images_path)[1])
    name=str(a)+str(b)
    print(name)
    image=cv2.imread(images_path)
    image_code=cv2_to_base64(image)
    image = []
    image.append(image_code)
    # 拼接参数
    files = {'file': image,'name': name}
    fff=json.dumps(files, ensure_ascii=False)
    # 发送post请求到服务器端json.dumps(files, ensure_ascii=False)
    # r = requests.post(url, json=json.dumps(files, ensure_ascii=False))
    r = requests.post(url, json=fff)
    print(r.status_code)
    print(r.content)
    print(type(json.dumps(files, ensure_ascii=False)))

client_camera.py

import requests
import base64,glob
import json,cv2,os
import numpy as np
# API地址
url = "http://10.16.55.26:9000/photo"

# opencv读取出来的图片相当于numpy数组
def cv2_to_base64(image):
    image1 = cv2.imencode('.jpg', image)[1]
    image_code = str(base64.b64encode(image1))[2:-1]
    return image_code

def base64_to_cv2(image_code):
    #解码
    img_data=base64.b64decode(image_code)
    #转为numpy
    img_array=np.fromstring(img_data,np.uint8)
    #转成opencv可用格式
    img=cv2.imdecode(img_array,cv2.COLOR_RGB2BGR)
    return img
# with open(r'D:\pycharm\car_fee_system\images\result\2.jpg', 'rb') as f:
#     img = base64.b64encode(f.read()).decode()
# frame 就是每一帧图像,是个三维矩阵
# 参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频
capture = cv2.VideoCapture(0)
ret, frame = capture.read()
a='cemare1'
b=1
while ret:
    b+=1
    if b%5==0:
        ret, frame = capture.read()
        name=str(a)+'-'+str(b)
        image_code=cv2_to_base64(frame)
        image = []
        image.append(image_code)
        # 拼接参数
        files = {'file': image,'name': name}
        fff=json.dumps(files, ensure_ascii=False)
        # 发送post请求到服务器端json.dumps(files, ensure_ascii=False)
        # r = requests.post(url, json=json.dumps(files, ensure_ascii=False))
        r = requests.post(url, json=fff)
        print('200为成功 500为失败',r.status_code)
        print('正在上传第{}张图片,图片名为{}'.format(b,name))
    # print(r.content)
    # print(type(json.dumps(files, ensure_ascii=False)))
目录
相关文章
|
1月前
|
安全 数据安全/隐私保护 开发者
Flask框架的安全性如何?
安全是一个持续的过程,需要不断地关注和更新。随着新的安全威胁的出现和技术的发展,开发者需要及时了解并采取相应的措施来应对,以确保 Flask 应用始终处于安全的状态。
|
26天前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
145 71
|
1月前
|
开发者 数据库管理 Python
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
118 64
|
26天前
|
安全 网络安全 数据安全/隐私保护
Flask框架的安全机制与其他框架相比有哪些优势和劣势?
总的来说,Flask 的安全机制在灵活性和可扩展性方面有其独特优势,但也需要开发者在安全方面投入更多的精力和努力,以确保应用的安全可靠运行。
51 11
|
25天前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
38 7
|
1月前
|
搜索推荐 API 开发者
Django框架和Flask框架的适用场景分别是什么?
总体而言,Django 更适合需要全面功能和大规模开发的场景,而 Flask 则更适合灵活性要求高、小型项目或特定需求的开发。当然,具体的选择还应根据项目的具体情况、团队的技术能力和偏好等因素来综合考虑。在实际应用中,开发者可以根据项目的特点和需求,灵活选择使用这两个框架,或者结合它们的优势来构建更强大的 Web 应用程序。
|
2月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
35 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
弹性计算 运维 安全
阿里云云服务器ECS介绍 学习笔记
阿里云云服务器ECS介绍 学习笔记
176 0
|
2天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
1天前
|
开发框架 缓存 .NET
阿里云轻量应用服务器、经济型e、通用算力型u1实例怎么选?区别及选择参考
在阿里云目前的活动中,价格比较优惠的云服务器有轻量应用服务器2核2G3M带宽68元1年,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年,这几个云服务器是用户关注度最高的。有的新手用户由于是初次使用阿里云服务器,对于轻量应用服务器、经济型e、通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍和对比,以供参考。