日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现文件上传下载

發布時間:2024/1/23 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现文件上传下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python實現文件上傳下載

環境準備:
1. 實驗分兩個文件,服務端(linux)和客戶端(windows).
服務端運行環境:python2.x
客戶端運行環境:python3.x
2. 使用了庫socket和os

客戶端代碼:

import socket # 調用socket庫HOST = "192.168.43.198" # 定義服務器ip PORT = 5555 # 定義端口號 addr = (HOST,PORT) # 由于使用socket進行連接,需要把ip和端口先轉換為元組 c = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 設定了網絡連接方式,以及傳輸使用的協議 c.connect(addr) #連接服務器 def send_file():data = c.recv(1024) # 設定接受數據大小print(str(data,encoding='gbk')) # 打印出來,看起來直觀,測試用,可以去除filepath = input("請輸入文件名和路徑:") # 輸入要從上傳的文件with open(filepath,"rb") as f: # 以只讀方式打開指定的文件file = f.read() # 以byte 的方式讀取文件內容datas = c.sendall(file) # 發送文件內容def get_file():filepath = input("請輸入服務器文件路徑:") # 輸入要從服務器下載的文件c.send(bytes(filepath,encoding='gbk')) # 向服務器發送我們要下載的信息data = c.recv(20480) # 指定接受數據大小with open("shadow.txt","wb") as f: # 打開本地文件,將接受到的數據寫入本地指定的目錄f.write(data)def main():while True:cmd = input("請輸入命令:") # 獲取用戶輸入的命令c.send(bytes(cmd,encoding='gbk')) # 發送用戶輸入的命令if cmd == "bye": # 如果用戶輸入bye結束程序breakif cmd == "upload": # 如果用戶輸入upload,調用send_file()函數,進行文件上傳send_file()if cmd == "down": # 如果用戶輸入down,調用get_file()函數,進行文件下載get_file()data = c.recv(20480) # 設置接受數據大小print(str(data,encoding='gbk')) # 將接受的數據打印出來,沒多大用# ~ c.send(b'word') #發送字符串前面加b轉換bytes比特格式 c.close()if __name__ == "__main__": # 調用main()函數main()

服務端代碼:

#!/usr/bin/env python #-*- utf8 -*- import socket # 調用socket庫 import os # 調用os庫HOST = "192.168.43.198" # 定義服務器ip PORT = 5555 # 定義端口號 addr = (HOST,PORT) # 由于使用socket進行連接,需要把ip和端口先轉換為元組 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 設定了網絡連接方式,以及傳輸使用的協議 s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.bind(addr) s.listen(1) conn,addr = s.accept()def get_file():conn.send("please sendfile:") # 向客戶端發送提示信息while True:data = conn.recv(1024) # 設置接受數據大小with open("/root/Desktop/up_load/data.txt","ab") as f: # 向指定的目錄寫入客戶端發送過來的信息f.write(data)if not data:breakconn.close() # 關閉連接def send_file():filepath = conn.recv(1024) # 設置接受數據大小,接受客戶端發送來的文件路徑with open(filepath,'rb') as f: # 讀取客戶端指定的文件data = f.read() conn.sendall(data) # 向客戶端發送客戶端指定的文件內容conn.close() # 關閉連接def main():while True:cmd = conn.recv(1024) # 接收客戶端發送來的數據if cmd == "bye": # 如果客戶端發送過來的是bye,結束程序breakif cmd == "upload": # 如果客戶端發送過來的是upload,調用函數get_file(),結束程序get_file()breakif cmd == "down": # 如果客戶端發送過來的是down,調用函數send_file(),結束程序send_file()breakdata = os.popen(cmd) # popen()可以執行shell命令,并讀取此命令返回值sdata = data.read() # 將得到的內容通過read()轉換后給了sdataif sdata:conn.sendall(sdata) # 將得到的內容全部發送給客戶端else:conn.send("finish") # 如果客戶端發送過來的是其他沒有的指令,向客戶端返回finish,防止程序假死conn.close() # 關閉連接s.close()if __name__ == "__main__":main()

總結

以上是生活随笔為你收集整理的python实现文件上传下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。