一、flask.request.files[‘file’] 方法

Flask的files方法可用于传各类文件,此处以传输视频为例。

  1. 客户端代码:(重点关注files组装方法)
    文件类型:传过来的文件是字典的类型(files = {‘file’:img_data})
图片数据:binary(二进制)类型上传。
文件类型:传过来的文件是字典的类型(files = {'file':img_data})
import requests
import json
#todo 用open读取
with open('./666051400.mp4','rb') as f:video_data = f.read()  #类型: <class 'bytes'>files = {'file':video_data,"card_json":open(json_path,'rb'),}
data = {'video_type':'mp4','unique_msg':'yfqtest0328','add_sign':0}
r = requests.post('http://127.0.0.1:8000/searchmp4', data, files=files) #一定要指明files=files
print(json.loads(r.text))#todo 用opencv读取
img=cv2.imread(path,cv2.IMREAD_COLOR)
imgRGB=cv2.cvtColor(img,cv2.IMREAD_COLOR) #转rgb  实际上不用转也行,直接跳过该步骤
r,buf=cv2.imencode(".jpg",imgRGB)  #图像编码
bytes_image=Image.fromarray(np.uint8(buf)).tobytes() #array转换成image再转bytes
files = {'file': bytes_image}
r = requests.post(url, files=files)
print(r.text)
  1. 服务端代码:(重点关注files接收方法)
import json,requests
import base64
import numpy as np
from  PIL import  Image
import flask
import io,cv2
from io import BytesIO,StringIOapp=flask.Flask(__name__)
@app.route("/",methods=["GET","POST"])
def registered_user():print("wo")try:if request.method == "POST":video_type = request.form.get('video_type')video_data.save('123.mp4')get_file=flask.request.files["file"]  #上传文件---><FileStorage: '71e630263c7ac3eb967420224c63bec.png' ('image/png')>pic=get_file.read()  #读取内容,一堆乱码   <class 'bytes'>user_image=Image.open(BytesIO(pic)) #BytesIO实现了在内存中读写bytesarry_image=np.array(user_image)# cv2.imwrite("query.jpg",arry_image)  #保存到本地# '.jpg'表示把当前图片img按照jpg格式编码pic1=cv2.imencode(".jpg",arry_image)[1].tostring() #.tostring()将number对象转为字符串pic2=base64.b64encode(pic1)  #使用base64编码类似字节的对象 s,并返回一个字节对象。register_data={"Pic":pic2.decode()}data=json.dumps(register_data) #将一个Python数据结构转换为JSONurl='http://localhost:8888/detect_line'r=requests.post(url,data) #发送post请求return json.loads(r.content)["results"]  #输出文件为json格式用此格式输出。except Exception  as e:import logginglogging.exception(e)return "error"#以上是数据的转换

二、flask.request.get_data() 方法

Flask的get_data()方法可用于传图片为例。

  1. 客户端代码
图片数据:将图片转为base64数据类型
文件数据:json文件形式上传。register_data = {'Pic': pic.decode(), 'Card_Json': json_file}
def cv_imread(file_path):# 读取中文路径cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)return cv_img
path=r"/data2/enducation/answer_card/answer-card-recognition/pic/2021-08-17_14_16_18.jpg"
pic = main.cv_imread(path)pic = cv_imread(path)pic = np.asarray(pic) #转nparrypic = cv2.imencode('.jpg', pic)[1].tobytes()  #使用UTF-8编码,再转bytes#json只支持字符串的格式传输,所以用base64编码,这个过程有点耗时0.5s左右pic = base64.b64encode(pic)# print(path.replace("jpg" or "png" or "JPG","json"))if os.path.exists(path.replace("jpg","json")):with open(path.replace("jpg","json"), 'r') as f:line=json.load(f)try:json_file=eval(line)except:json_file=lineelse:json_file=Noneregister_data = {'Pic': pic.decode(), 'Card_Json': json_file} data = json.dumps(register_data) #python数据转jsonr = requests.post(url, data)para = json.loads(r.content)  #返回的值也是jsonprint(para['answer'])print(para['idNumber'])
  1. 服务端代码
paras = json.loads(flask.request.get_data()) #拿到json文件(pic,json)并读取#取出图片
pic = paras['Pic']
user_image = base64.b64decode(pic)  #解码base64
img_array = np.fromstring(user_image, np.uint8) #从字符串中进行解码出arry类型数据
# cv2.imwrite('query.jpg', img_array)
img = cv2.imdecode(img_array, cv2.COLOR_BGR2RGB) #解码并转rgb#取出json文件
json_handle = paras['Card_Json']try:json_handle = eval(json_handle)except:json_handle = json_handle

下面是一些格式的转换`。

import base64
import numpy as np
import requests as req
from PIL import Image
from io import BytesIO
import re
import cv2# ???????url????????PIL Image????
def url_to_PIL_Image(img_url):response = req.get(img_url)image = Image.open(BytesIO(response.content))return image# ?base64??????PIL Image????
def base64_to_PIL_Image(base64_str):byte_data = base64.b64decode(base64_str)image_data = BytesIO(byte_data)img = Image.open(image_data)return img# ???base64_str
def change_img_as_base64(img_name):with open(img_name, 'rb') as f:return base64.b64encode(f.read())# base64_str???
def change_base64_as_img(base64_str, result_img_path=None):img_data = base64.b64decode(base64_str)# ????if result_img_path is not None:with open(result_img_path, 'wb') as f:f.write(img_data)return img_data# base64_str?opencv??
def change_base64_as_opencv(base64_str):img_data = base64.b64decode(base64_str)img_array = np.fromstring(img_data, np.uint8)  # ??np??img = cv2.imdecode(img_array, cv2.COLOR_BGR2RGB)  # ??Opencv??return img

后面工作中越到慢慢做补充。。。。。。

一、网页端文件流的传输相关推荐

  1. c++ 使用socket实现C/S端文件的下载传输

    首先是服务器端,大致说下流程:服务器创建线程去处理应答accept(),当接受到客户端连接请求时,首先获取要发送的指定的文件数据总大小给客户端,接着就是循环读取要发送的文件数据流向客户端发送文件数据, ...

  2. C#利用WCF改进文件流传输的三种方式

    摘要:本文介绍C#利用WCF改进文件流传输的三种方式:MTOM模型.基于同步传输的异步回调模型.基于异步传输的异步模型,并提供相应的实现代码供参考. - WCF在跨域传输使用了两种模型的方法调用:一种 ...

  3. python web项目导出zip文件_通过javascript在网页端生成zip压缩包并下载

    zip.js是什么 通过zip.js封装一个能在网页端生成zip文件的插件, 直接在网页中创建包含文件夹和文件的压缩包,也可以自定义名字并下载: 如何使用: 1:引用zip.js 2:引用jQuery ...

  4. php接收流文件,PHP传输文件流及文件流的保存

    什么是文件流 在HTTP数据传送过程中,传输一方直接以二进制流方式传送文件内容,这样就形成了一个文件流: 文件流的接收通常涉及到预定义变量函数 $HTTP_RAW_POST_DATA 和 file_g ...

  5. python的文件流,初步网页爬虫,序列化和反序列化

    一.文件流 1.  open方法是打开文件,方法是: open("文件名",'打开方式','缓存'') 参数说明: "文件名":包含了你要访问的文件路径及文件名 ...

  6. 如何给multicraft装PHP,我的世界Linux搭建Multicraft网页后台教程更新和添加服务端文件...

    小编为大家带来了<我的世界>Linux搭建Multicraft网页后台教程更新和添加服务端文件,这个是一个比较重要的教程,当然用不到的玩家可以跳过了. 重新登录 点击"设置&qu ...

  7. 读取csv文件 java_Java:逐步读取/流式传输CSV文件

    读取csv文件 java 我一直在做一些涉及读取CSV文件的工作,而我一直在使用OpenCSV ,而我的最初方法是逐行读取文件,解析内容并将其保存到地图列表中. 当文件的内容适合内存时,此方法有效,但 ...

  8. Java:逐步读取/流式传输CSV文件

    我一直在做一些涉及读取CSV文件的工作,而我一直在使用OpenCSV ,而我的最初方法是逐行读取文件,解析内容并将其保存到地图列表中. 当文件的内容适合内存时,此方法有效,但对于较大的文件来说是个问题 ...

  9. 从MongoDB GridFS流式传输文件

    不久前,我在Twitter上发布了自己的最新作品,即从MongoDB GridFS传输文件进行下载(而不是将整个文件存储到内存中然后提供服务),这是我取得的一个小胜利. 我答应就此事写博客,但不幸的是 ...

最新文章

  1. Day08 - 面向对象编程基础
  2. 用hutool进行RSA编码及解码
  3. IBASE handle free after save - buffer table cleared
  4. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测——LCT
  5. 基于Vivado的程序下载
  6. kernel ramdump分析--如何启动crash
  7. 位移的单位符号_初中物理符号级单位符号公式大全
  8. D-028 DDR3硬件电路设计
  9. 个子矮s弯如何看点打方向图解_科目二s弯怎么看点打方向技巧图解
  10. 华为云计算IE面试笔记-桌面云中的用户组、虚拟机模板、模板虚拟机、虚拟机组和桌面组的关系及区别。发放完整复制和链接克隆虚拟机时,步骤有什么区别,要怎么选择桌面组?
  11. 逗比学CTF.day2
  12. 网站APP游戏被入侵渗透破解该怎么解决
  13. 【编程语言】Lua完全自学手册
  14. 为啥用计算机分析模拟,计算机模拟的优缺点及应用分析
  15. SQL 入门的必读好书
  16. 用友nc登陆提示java_用友NC软件无法进入登陆界面,提示“网页上有错误”等现象   问题现象...
  17. CSDN怎么更换皮肤
  18. 共享盘/文件夹加密及连接
  19. 【数据分发服务DDS】软件定义汽车【四】-行业现状
  20. 基于java+springboot+mybatis+vue+elementui的口红电子购物商城

热门文章

  1. 带你搭一个SpringBoot+SpringData JPA的环境
  2. 判断路径下文件是否存在
  3. 2022-2028年中国化学纤维行业市场研究及前瞻分析报告
  4. Linux LVM逻辑卷配置过程详解
  5. AngularJS 指令
  6. C# split 几种使用方法
  7. 关于css中float的一切
  8. 如何获取元素最终使用的css值
  9. 如何 SQL Server 2005 实例之间传输登录和密码
  10. 【Leetcode】刷题之路4(python版)