python文件上傳功能

python實現文件上傳功能

下面是客戶端和服務端實現文件上傳功能的程序實現代碼,具體實現請寫的很詳細了,這裏我就不廢話直接貼代碼。歡迎留言優化程序代碼!!!

客戶端文件上傳功能代碼
import os
import socket

# 創建客戶端socket對象
client_socket = socket.socket()
# IP 和 Port
address = (IP, Port)
# 客戶端連接
client_socket.connect(address)
# 文件路徑
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

while True:
    msg = input('>>> ').strip()

    cmd, path = msg.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)

    client_socket.sendall(bytes(file_info, "utf8"))
    # 打開文件路徑,rb字節流模式讀取文件
    f = open(path, 'rb')

    has_sent = 0
    while has_sent != file_size:
        data = f.read(1024)
        client_socket.sendall(data)
        has_sent += len(data)

    f.close()
    print("上傳成功")
    # if not msg:
    #     continue
    # client_socket.send(msg.encode('utf-8'))
    # data = client_socket.recv(1024)
    # print(data.decode('utf-8'))

# 關閉套接字
client_socket.close()
服務器文件上傳功能代碼
import socket
import os

# 創建socket對象
server_socket = socket.socket()
# IP 和 Port
address = (IP, Port)
# 綁定IP和Prot
server_socket.bind(address)
server_socket.listen(3)

# 路徑
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

while 1:
    conn, addr = server_socket.accept()
    while 1:
        data = conn.recv(1024)
        cmd, filename, filesize = str(data, 'utf8').split('|')
        path = os.path.join(BASE_DIR, 'yuan', filename)
        filesize = int(filesize)

        # 打開文件位置,以'ab'追加模式寫入
        f = open(path, 'ab')

        has_recerve = 0
        while has_recerve != filesize:
            data = conn.recv(1024)
            f.write(data)
            has_recerve += len(data)

        f.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章