• HTTPServer接收并保存图片或文件


    导入所需的库

    from http.server import HTTPServer, BaseHTTPRequestHandler
    import json
    import socket
    import cgi
    from cgi import parse_header, parse_multipart
    import urllib.request
    import io,shutil
    import re

    创建Request类处理HTTP请求

    class Resquest(BaseHTTPRequestHandler):
        def handler(self):
            print("data:", self.rfile.readline().decode())
            self.wfile.write(self.rfile.readline())
    
        def do_GET(self):        # 处理get请求
            print(self.requestline)
            if self.path != '/hello':
                self.send_error(404, "Page not Found!")
                return
    
            data = {
                'result_code': '1',
                'result_desc': 'Success',
                'timestamp': '',
                'data': {'message_id': 
                     '25d55ad283aa400af464c76d713c07ad'}
                            }
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.end_headers()
            self.wfile.write(json.dumps(data).encode())
    
        def do_POST(self):         # 处理post请求
            length = int(self.headers['content-length'])
            req_data = self.rfile.read(length)    # 读取所有http请求报文
            print(self.headers)        # 请求头信息
            print(self.command)      # 请求方式
            # 使用re解析出http请求中的图片,图片为字节类型
            # 图片数据需要去除httpserver加进去的form-data的边界线和文件的描述信息
            # 本例使用re去除boundary和文件描述的key:value  
            pattern1 = re.compile(b"-+w*s{2}(.*?s{2}){2}s{2}")
            pattern2 = re.compile(b"s{2}-+.+s{2}")
            res1 = re.match(pattern1, req_data)
            res2 = re.search(pattern2, req_data)
            file_data = req_data[res1.end():res2.start()]  
    
            # 将解析出的文件字节, 保存到本地
            with open("xx.jpg", "wb") as w:
                w.write(file_data)       
    
            data = {
                    'result_code': '2',
                    'result_desc': 'Success',
                    'timestamp': '',
                    'data': {'message_id': 
                                '25d55ad283aa400af464c76d713c07ad'}
                               }
            # 返回响应报文
            self.send_response(200)   # 响应行
            self.send_header('Content-type', 'application/json') # 响应头
            self.end_headers()  # 空行
            self.wfile.write(json.dumps(data).encode('utf-8'))   # 响应体                    

    启动服务端

    if __name__ == '__main__':
        host = ('127.0.0.1', 9002)
        server = HTTPServer(host, Resquest)
        print("Starting server, listen at: %s:%s" % host)
        server.serve_forever()

    使用postman往服务器发图片

    后台成功接收, 并保存图片

  • 相关阅读:
    在虚拟机上安装Docker并运行镜像下
    分红包思想
    从微信授权到JWT认证——玩转token之路
    .Net(C#)数据库访问连接方式
    Asp.Net导出Excel表格之二(HttpContext.Current.Response)
    我的ip_本机ip_本地ip_本机ip地址_公网ip_ip地址查询
    干货版“测试小品”欢乐场景
    家用宽带搭建Hmailserver邮箱服务器
    【microPython与esp8266】之一——呼吸灯与PWM
    截取长文本,显示省略号(text-overflow:ellipsis)
  • 原文地址:https://www.cnblogs.com/draven123/p/11379061.html
Copyright © 2020-2023  润新知