Python Socket 传输图片并按指定路径保存

背景

项目扩展,需要将多台服务器上的执行截图,同步到主服务器上。其他格式文件同样适用

主要难点
客户端,如何将路径信息与图片信息, 拆分,大多数是直接拆分,并没有进行转码,这里试了几次,没走通,转码之后,问题解决。
发送过程较为简单,就是普通的转码,字符拼接。
话不多说,看代码

服务端(接收文件)

import os
import socket
import settings


def socket_server():
    buffer = 4096
    sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sk.bind((settings.socket_host, settings.socket_port))
    sk.listen(100)

    while True:
        conn, addr = sk.accept()
        info = ''.encode()
        while 1:
            data = conn.recv(buffer)
            info += data
            if not data:
                break

		# 信息的切割,一定要encode, 否则会失败
        info = info.split('####'.encode())
        
        file_name = info[0].decode()
        file_data = info[1]
        file_path = '\\'.join(file_name.split('\\')[:-1:])
		
		# 创建路径
        os.makedirs(file_path, exist_ok=True)
	
		# 保存
        with open(file_name, 'wb') as f:
            f.write(file_data)

客户端(发送文件)

def pic_dealer(path):
	"""
	path: 文件路径
	return: path
	"""
    def reset_pic_quality(path, percent=0.5):
    	"""
    	图片预处理,将大于1M的图片,按百分比缩放
    	path: 路径
    	percent: 缩放比,默认50%
    	return: None
    	"""
        size = os.path.getsize(path) // 1024
        if size >= 1024:
            img = Image.open(path)
            width, height = img.size
            out = img.resize((int(width * percent), int(height * percent)), Image.ANTIALIAS)
            out.save(path)
        return path
	
	# 每次发送的字节数
    buffer = 4096
    sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sk.connect((settings.socket_host, settings.socket_port))
    path = reset_pic_quality(path)
    
    with open(path, 'rb') as f:
        lenth = 0
        while 1:
            data = f.read(buffer)
            if lenth:
                sk.send(data)
            else:
                sk.send(path.encode() + '####'.encode() + data)
            if len(data) < buffer:
                break
            lenth += len(data)
    sk.close()
    os.remove(path)

有不妥的地方,望不吝赐教

发布了2 篇原创文章 · 获赞 0 · 访问量 1493
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览