zoukankan      html  css  js  c++  java
  • Python(文件上传)

    day26

    通过socket上传文件。

    post_client.py

     1 import socket
     2 import os
     3 sk = socket.socket()
     4 print(sk)
     5 address = ('127.0.0.1', 8003)
     6 sk.connect(address)
     7 
     8 BASE_DIR = os.path.dirname(os.path.abspath(__file__))#当前执行文件路径
     9 
    10 while True:
    11     inp = input('>>>').strip()#post abc.png
    12     cmd, path = inp.split('|') #post, 需传送的文件即abc.png
    13     path = os.path.join(BASE_DIR, path)#完整的路径拼接
    14     filename = os.path.basename(path)#文件名字
    15     file_size = os.stat(path).st_size#查看文件大小
    16 
    17     file_info = 'post|%s|%s'%(filename, file_size)#文件信息
    18     sk.sendall(bytes(file_info, 'utf8'))
    19 
    20     f = open(path, 'rb')#字节b为bytes
    21     has_sent = 0
    22     while has_sent != file_size:#相同大小说明全部上传
    23         data = f.read(1024)#取一部分发
    24         sk.sendall(data)
    25         has_sent += len(data)
    26 
    27     f.close()
    28     print('上传成功')
    29 
    30 
    31 sk.close()
    32 #print(sk)

    post_server.py

     1 import socket
     2 import subprocess
     3 sk = socket.socket()#创建socket
     4 import os
     5 print(sk)
     6 
     7 address = ('127.0.0.1', 8003)#本机地址
     8 sk.bind(address)#为socket绑定IP和端口号
     9 
    10 sk.listen(3)#限制排队的个数
    11 print('waiting......')
    12 BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    13 
    14 while True:
    15     conn, addr = sk.accept()
    16 
    17     while True:
    18         data = conn.recv(1024)
    19         cmd, filename, filesize = str(data, 'utf8').split('|')#获得信息
    20         path = os.path.join(BASE_DIR, 'far', filename)#新路径
    21         filesize = int(filesize)
    22 
    23         f = open(path, 'ab')
    24         has_receive = 0
    25         #接收
    26         while has_receive != filesize:
    27             data = conn.recv(1024)
    28             f.write(data)
    29             has_receive += len(data)
    30 
    31         f.close()#不能忘记关闭,否则出错
    32         print('接收完毕!')
    33 sk.close()#全关

    执行post_server.py,再执行post_client.py,在client中输入post|abc.png进行上传。

    (其中abc.png和两个执行文件同级,在以上三个文件相同位置还存在一个far包)

  • 相关阅读:
    从目标检测到图像分割简要发展史
    用卷积神经网络和自注意力机制实现QANet(问答网络)
    C# 监测每个方法的执行次数和占用时间(测试5)
    C# list常用的几个操作 改变list中某个元素的值 替换某一段数据
    C# 监测每个方法的执行次数和占用时间(测试4)
    生活 对最近工作 和 生活 感悟
    Cesium 加载天地图
    其它 开发常用工具
    PowerDesigner 画流程图
    RookeyFrame bin 目录
  • 原文地址:https://www.cnblogs.com/112358nizhipeng/p/9892128.html
Copyright © 2011-2022 走看看