How to download file from local server in Python

↘锁芯ラ 提交于 2020-01-03 05:20:11

问题


Scenario is:

  1. Client will Enter a file name e.g xyz
  2. Server will show all the files that it have in different folders.

Client will select 1 or 2 or 3 (if there). and file will be downloaded.

I have done searching part. I want help in downloading and saving the file in any other directory.

My code so far is for searching the file.

import socket
tcp_ip="127.0.0.1"
tcp_port=1024
buffer_size= 200
filename=raw_input("Enter file name\n")

s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((tcp_ip,tcp_port))
data=s.recv(buffer_size)
s.close()

Server Code : (This code is now for one file) The required help is how to download and save that file which is found at server.

import socket
import os
tcp_ip='127.0.0.1'
tcp_port=1024
buffer_size=100
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((tcp_ip, tcp_port))
s.listen(1)
conn, addr = s.accept()
print 'Connection Address:',addr
while 1:
    data=conn.recv(buffer_size)
    if not data: 
        break
    else:
        print "received server side data:", data
    conn.send(data)
conn.close()

回答1:


Following is the example which shows how to download a file from a server over tcp.

Client Code:

import socket
import os

HOST = 'localhost'    
PORT = 1024
downloadDir = "/tmp"


filename = raw_input('Enter your filename: ')
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket1.connect((HOST, PORT))
socket1.send(filename)
with open(os.path.join(downloadDir, filename), 'wb') as file_to_write:
    while True:
        data = socket1.recv(1024)
        if not data:
            break
        file_to_write.write(data)
    file_to_write.close()
socket1.close()

Server Code:

import socket
HOST = 'localhost'
PORT = 1024

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((HOST, PORT))
socket.listen(1)
while (1):
    conn, addr = socket.accept()
    reqFile = conn.recv(1024)
    with open(reqFile, 'rb') as file_to_send:
        for data in file_to_send:
            conn.sendall(data)
    conn.close()

socket.close()

Note: server code is not robust and will crash when file doesn't exists. You should modify above example according to your needs.



来源:https://stackoverflow.com/questions/29110620/how-to-download-file-from-local-server-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!