Saya berasumsi bahwa dengan "sftp client" Anda merujuk ke klien SFTP OpenSSH. "Masalahnya" adalah ketika Anda menekan Ctrl+C, itu menghentikan pengunggahan dan dengan bersih menutup file jarak jauh, sama seperti jika pengunggahan selesai sepenuhnya (perhatikan bahwa itu adalah perilaku yang benar dan banyak klien SFTP lainnya berperilaku sama). Jadi server sama sekali tidak memiliki cara untuk mengatakan bahwa unggahan itu terputus.
Yah itu benar-benar telah, karena klien OpenSSH mengirimkan petunjuk ukuran ke server saat membuat file. Tetapi server OpenSSH tidak menggunakan atau bahkan mencatat informasi itu. Meskipun akan sangat sederhana untuk memodifikasi kodenya untuk mencatat ukuran, jika itu pilihan bagi Anda.
Lihat process_open
di sftp-server.c
:
a = get_attrib();
flags = flags_from_portable(pflags);
mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
logit("open \"%s\" flags %s mode 0%o",
name, string_from_portable(pflags), mode);
Ubah logit
pernyataan menjadi:
logit("open \"%s\" flags %s mode 0%o size %llu",
name, string_from_portable(pflags), mode, (unsigned long long)a->size);
Perhatikan bahwa pengiriman ukuran petunjuk adalah opsional. Sementara beberapa klien SFTP akan mengirimkannya (misalnya OpenSSH atau WinSCP), beberapa tidak akan (misalnya PSFTP, FileZilla, atau LFTP). Dalam kasus seperti itu, Anda akan mendapatkan 0 in a->size
.
Seandainya klien benar-benar membatalkan pengunggahan (tanpa menutup file jarak jauh dengan bersih, misalnya ketika sftp
terbunuh), Anda akan dapat mengetahuinya dari awalan "terpaksa" untuk merekam "tutup":
paksa ditutup "/ data /README.md" byte baca 0 ditulis 5366