ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文件的上传和下载

2021-04-24 23:04:18  阅读:153  来源: 互联网

标签:文件 len sk json file bs 上传 下载 size


文件下载的逻辑和上传的逻辑是一样的。这里以文件的上传为例

client:

import socket
import os
import struct
import json

sk = socket.socket()
sk.connect(("127.0.0.1", 8123))

# 要发送的文件
file_path = "my_socket_util.py"

# 拿到文件大小和文件名字
file_size = os.path.getsize(file_path)
file_name = os.path.basename(file_path)

# 组装一个字典.
file_json = {"file_name": file_name, "file_size": file_size}
# 转化成json字符串, 里面存着数据
file_json_str = json.dumps(file_json)
# 把json字符串发送出去. 防止黏包. 需要先发送数据大小
file_json_bs = file_json_str.encode("utf-8")
file_len_bs = struct.pack("i", len(file_json_bs))
sk.send(file_len_bs)

# 发送json数据
sk.send(file_json_bs)

# 发送文件数据
with open(file_path, mode="rb") as f:
    while file_size > 0:
        bs = f.read(1024)  # 每次最多发送1024个字节
        sk.send(bs)
        file_size -= len(bs)  # 发一次少一些字节

print("上传完毕")
sk.close()

server:

import socket
import struct
import json

sk = socket.socket()
sk.bind(("127.0.0.1", 8123))
sk.listen()

conn, address = sk.accept()

# 接收json长度, 放黏包
file_json_len_bs = conn.recv(4)
file_json_len = struct.unpack("i", file_json_len_bs)[0]
# 获取json字符串
file_json_str = conn.recv(file_json_len).decode('utf-8')
# 转化回字典
file_json = json.loads(file_json_str)

with open(f"上传/{file_json['file_name']}", mode="wb") as f:
    while file_json['file_size'] > 0:
        bs = conn.recv(1024)
        file_json['file_size'] -= len(bs)
        f.write(bs)
        print("one part")

print("上传完毕")
sk.close()

标签:文件,len,sk,json,file,bs,上传,下载,size
来源: https://www.cnblogs.com/pure3417/p/14698470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有