• Python 简单的文件上传功能


    简单地在程序当前目录下上传一张图片: 1.png 到程序的 yuan 文件夹下。这里使用的是固定参数 post,如果后期有需求,可以增加判断来更加完善程序。

    # server 端
    import socket, os
    
    sk = socket.socket()
    address=('127.0.0.1', 8000)
    sk.bind(address)
    sk.listen(3)
    print('waiting....')
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    
    while 1:
        conn, addr = sk.accept()
        while 1:
            data = conn.recv(1024)
            cmd, filename, filesize = str(data, 'utf8').split('|')
            path = os.path.join(BASE_DIR, 'yuan', filename)
    
            f = open(path, 'ab')
            has_receive = 0
            while has_receive != filesize:
                data = conn.recv(1024)
                f.write(data)
                has_receive += len(data)
    
            f.close()
    
    # client 端
    import socket, os
    sk = socket.socket()
    print(sk)
    
    address = ('127.0.0.1', 8000)
    sk.connect(address)
    
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    #print(BASE_DIR)
    
    while True:
        inp = input('>>>') # post|1.png
        cmd, path = inp.split('|')
        path = os.path.join(BASE_DIR, path)
    
        filename = os.path.basename(path)
        file_size = os.stat(path).st_size
        file_info = 'post|%s|%s'%(filename, file_size)
    
        sk.sendall(bytes(file_info, 'utf8'))
    
        f = open(path, 'rb')
        has_sent = 0
        while has_sent != file_size:
            data = f.read(1024)
            sk.sendall(data)
            has_sent += len(data)
        f.close()
        print('上传成功')
    
    运行结果:
    <socket.socket fd=296, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
    >>>post|1.png
    上传成功
    
  • 相关阅读:
    装饰者模式
    使用dom4j工具:读取xml(一)
    关于设计模式
    简单工厂模式
    Html 笔记
    数据库SQL归纳(三)
    windows上同时安装两个版本的mysql数据库
    MySQL的使用
    数据库SQL归纳(二)
    数据库SQL归纳(一)
  • 原文地址:https://www.cnblogs.com/klvchen/p/9251688.html
Copyright © 2020-2023  润新知