Python3的文件上传 - Go语言中文社区

Python3的文件上传


服务器端

import socket
import os

BASE_DIR = os.path.dirname(os.path.abspath(__file__))  # 获取绝对路径
sk = socket.socket()
address = ('127.0.0.1', 8000)  # 地址
sk.bind(address)  # 绑定
sk.listen(4)  # 监听
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, 'pic', filename)
        filesize = int(filesize)

        # 接收文件
        f = open(path, 'ab')
        has_receive = 0
        while has_receive != filesize:
            data = conn.recv(1024)
            f.write(data)
            has_receive += len(data)
        f.close()

sk.close()

客户端

import socket
import os

sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.connect(address)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
while 1:
    # 发送文件信息
    inp = input('>>>').strip()
    cmd, path = inp.split('|')  # post socket.png
    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('post successful')

记得在上述文件同级目录下新建一个文件夹pic用于接收文件

在客户端运行端口输入   'cmd|img.png'  其中cmd 为post img.png为上传目标图片,事前放进同级目录下。也可以自己填文件路径

例如:我的文件为:socket.png

你也可以右键上图另存为socket.png 然后放进上面同级目录下

然后运行服务器端和客户端,在客户端终端输入  post|socket.png

如果提示post successful就完成文件上传操作了。

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_26816591/article/details/89469364
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-18 20:12:26
  • 阅读 ( 899 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢