Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know if file is complete on the server using FTP?

Tags:

I have a file scanner application in Java, that keeps scanning a directory on a server using FTP. gets list of files of the directory and downloads them one by one. on the other side, on the server, there's a process that writes these files. if I'm lucky I wouldn't try to download an incomplete file but how can I make sure if the write process on the server is complete and the file handle is closed, and file is ready to be downloaded?

I have no control on the write process which is on the server. moreover, I don't have write permission on the directory to try to get a write-handle in order to check if there's already a write handle open, so this option is off the table.

Is there an FTP function addressing this problem?

like image 342
mostafa.S Avatar asked Jan 22 '13 05:01

mostafa.S


People also ask

Does FTP move or read files?

Using FTP, a client can upload, download, delete, rename, move and copy files on a server.


1 Answers

This is a very old and well-known problem.

There is no way to be absolutely certain a file being written by the FTP daemon is complete. It's even possible that the file transfer failed and then gets restarted and completed. You must poll the file's size and set a time limit, say 5 minutes. If the size does not change during that time you assume the file is complete.

If possible, the program that processes the file should be able to deal with partial files.

A much better alternative is rsync, which is much more robust and deterministic. It can even be configured (via command-line option) to write the data initially to a temporary location and move it to its final destination path upon successful completion. If the file exists where you expect it, then it is by definition complete.

like image 174
Jim Garrison Avatar answered Oct 09 '22 20:10

Jim Garrison