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月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
2月前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
125 60
|
3月前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
205 71
|
3月前
|
安全 网络安全 数据安全/隐私保护
Flask框架的安全机制与其他框架相比有哪些优势和劣势?
总的来说,Flask 的安全机制在灵活性和可扩展性方面有其独特优势,但也需要开发者在安全方面投入更多的精力和努力,以确保应用的安全可靠运行。
86 12
|
3月前
|
安全 数据安全/隐私保护 开发者
Flask框架的安全性如何?
安全是一个持续的过程,需要不断地关注和更新。随着新的安全威胁的出现和技术的发展,开发者需要及时了解并采取相应的措施来应对,以确保 Flask 应用始终处于安全的状态。
182 63
|
3月前
|
搜索推荐 API 开发者
Django框架和Flask框架的适用场景分别是什么?
总体而言,Django 更适合需要全面功能和大规模开发的场景,而 Flask 则更适合灵活性要求高、小型项目或特定需求的开发。当然,具体的选择还应根据项目的具体情况、团队的技术能力和偏好等因素来综合考虑。在实际应用中,开发者可以根据项目的特点和需求,灵活选择使用这两个框架,或者结合它们的优势来构建更强大的 Web 应用程序。
162 64
|
3月前
|
开发者 数据库管理 Python
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
174 64
|
4月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
55 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
弹性计算 运维 安全
阿里云云服务器ECS介绍 学习笔记
阿里云云服务器ECS介绍 学习笔记
182 0
|
3天前
|
机器学习/深度学习 人工智能 程序员
阿里云出手DeepSeek拒绝服务器繁忙,程序员直呼:真香!
阿里云PAI平台支持一键部署DeepSeek-V3和DeepSeek-R1大模型,用户无需编写代码即可完成从训练到部署的全过程。通过PAI Model Gallery,开发者可轻松选择并部署所需模型版本,享受高效、便捷的AI开发体验。教程详细介绍了开通PAI、选择模型及一键部署的具体步骤,帮助用户快速上手。

热门文章

最新文章