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往服務器發圖片

 

后台成功接收, 並保存圖片

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM