How to download file from local server in Python
Question: 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()
    


Answer: 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.

