0

I've been working on a client-server application where I'm implementing a file download feature. The download seems to work, as it saves files to the specified SAVE_DIRECTORY on both the client and server sides. However, there's a persistent problem where the downloaded files are consistently empty, even if the file doesn't exist on the server.

Here's a simplified version of my code structure: server side -

    elsif command.start_with?('download')
      filename = command[9..-1]
      client.puts("download #{filename}")  # Invia il comando per avviare il download
      save_path = File.join(SAVE_DIRECTORY, filename)
      if File.exist?(save_path)
        file_size = File.size(save_path)  # Ottieni la dimensione del file nel server
        client.puts(file_size.to_s)  # Invia la dimensione del file al client
    
        File.open(save_path, 'rb') do |file|
          client.write(file.read)  # Invia tutto il contenuto del file al client
        end
        puts "Download completato. Salvato come #{filename}".colorize(:green)
      else
        client.puts("Errore: Il file #{filename} non esiste.")
      end

and client side -

elsif command.start_with?('download')
    client.puts(command)  
    filename = command[9..-1]  
    file_size = client.gets.to_i
    save_path = File.join(SAVE_DIRECTORY, filename)  
    file_size = client.gets.to_i  
    puts "Dimensione del file: #{file_size}".colorize(:yellow)
  
    File.open(save_path, 'wb') do |file|
      received_data = client.read(file_size)  
      file.write(received_data)
    end
  
    puts "Download completato. Salvato come #{filename}".colorize(:green)
    

Despite my best efforts, I've been unable to resolve the issue of empty downloaded files. I suspect that there might be something I'm overlooking in the chunk handling process or in the interaction between the client and server. Could you kindly provide insights or suggestions to help me fix this problem? Additionally, I'm wondering if there's a way to ensure that only existing files are downloaded to the SAVE_DIRECTORY and saved as expected.

Any assistance would be greatly appreciated. Thank you in advance.

Best regards, Alessandro

Checked Chunk Handling: I examined the chunk handling process in both the server and client code to ensure that chunks of data are being read, sent, and received correctly.

Verified SAVE_DIRECTORY: I confirmed that the SAVE_DIRECTORY variable is correctly specified and pointing to the desired folder for saving downloaded files.

Examined File Existence: I've checked that the server-side code verifies the existence of the requested file before attempting to send it to the client. If the file doesn't exist, an error message is sent to the client.

Debugging Output: I've added debug statements to output the size of chunks being sent and received during the download process. However, the chunk sizes appear to be consistent with expectations.

File Read and Write: I reviewed the file reading and writing processes to ensure that chunks are properly read from the server-side file and written to the client-side file.

  • The client expects the server to send a file size but I cannot see where the server sends one. – Steffen Ullrich Aug 22 '23 at 15:10
  • i edited the code sorry for omission now the code say "download complete" but in save_directory there is nothing – Alessandro Altobelli Aug 22 '23 at 16:09
  • Given this omission I must assume that what you show as code is a simplified version of what you actually use - which means it is different and your simplification might actually hide the cause of the problem. The code is also not complete which means that one cannot reproduce what you are doing. Please follow [How to create a Minimal, Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example) on how to create something which can actually be used by others to reproduce and debug your problem. – Steffen Ullrich Aug 22 '23 at 16:32

0 Answers0