我想以編程方式將文件上載到ftp服務器(C++)。如果在上傳文件時連接丟失,我不想從頭開始上傳文件,而只上傳我沒有發送的部分。使用FTP「附加」命令
APPE命令是否滿足我的要求?我應該使用什麼FTP命令列表?如何?
我想以編程方式將文件上載到ftp服務器(C++)。如果在上傳文件時連接丟失,我不想從頭開始上傳文件,而只上傳我沒有發送的部分。使用FTP「附加」命令
APPE命令是否滿足我的要求?我應該使用什麼FTP命令列表?如何?
檢查RFC並且具體地APPEND
命令:
這 命令使服務器DTP到 接受經由 數據連接傳送的數據,並 存儲數據在一個文件在服務器現場。如果在服務器站點上的路徑名中指定的文件 存在 ,則應將數據 附加到該文件; 否則應在 服務器站點創建 路徑名中指定的文件。
請注意,您不能簡單地再次添加同一個文件。您應該發送剩餘的字節。也就是說,當連接丟失時繼續保持相同的位置。
我在網上搜索有關APPE FTP命令的詳細信息,實際上它做了什麼,但大多數站點只是狀態追加。然後我嘗試一下命令以確保它的行爲如預期。
我設計FTP自動發件人,用於從機器發送日誌文件到服務器進行報告。我只想發送日誌文件的最後一行。
當使用APPE命令時,它實際上附加了整個文件內容並追加到服務器中的現有文件中。這將導致行條目重複。
答案: 待辦事項文件的恢復,如果持續傳輸失敗,對於沒有這樣的命令,但我們需要使用命令序列來實現它。
這裏的關鍵是如果您使用APPE命令或使用命令REST,請將您的本地文件查找到最後上傳的字節。 REST將開始在該特定字節開始位置傳輸。我最終了這個解決方案來執行連接建立後:
使用APPE(我從FileZilla中日誌的想法):
使用STOR與REST(我從edtFTPnet的想法):
請注意並不是所有的FTP服務器都支持這種方式。我看到FileZilla切換這兩種方式取決於服務器。我的觀察表明使用REST是標準方法。下載也可以使用REST在給定的字節位置開始下載。
請記住,由於Unix和Windows具有不同的換行符字節數,因此使用ASCII傳輸類型的恢復支持將產生意外的結果。
嘗試操作FileZilla以查看日誌中的行爲。 您也可以查看這個有用的.NET庫的開源FTP,瞭解它們的工作方式。 edtFTPnet