How can i check if a file is well transfered when using SFTP?

Solution 1:

Not really. The best you could do is run sha1sum via ssh against the remote file and see if that matches the same hash of the local file.

A different tool such as scp or rsync may return an error code on transfer failure.

Solution 2:

There are specific SFTP protocol extensions to calculate file hashes, and such extensions are supported by most clients and servers (it's very common). See this link for full documentation of such extensions: https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-extensions-00#section-3

Anyway, given the above, I would recommend to use a SFTP client that supports such extensions and calculate the hash code of your file both on the client and the server (after transfer) and check if they're the same. That's the safest way to accomplish your goal.

Solution 3:

sFTP protocol has buildin error checking.
That the client creates a zero-byte file in stead of given the user an error message can be due to 3 things:

  1. The server doesn't return the error properly to the client. (I've seen that happen with quota issues...) If that is the case the only way to verify that the file was transferred OK is to read it back (by the client) and compare to the original file client-side. (I'm assuming you can't make changes server-side.)
  2. The server returns the error, but the sFTP client program doesn't handle this properly. Get a different sFTP client. (Please note that in some clients error-handling can be disabled. Check the settings.)
  3. The client did handle the error but the user simply ignored it: Educate your user.