2010-03-29 80 views
4

假設我想通過FTP傳輸一部分文件 - 是否可以使用標準的FTP協議?FTP協議中有沒有像HTTP範圍標頭那樣的東西?

在HTTP中,我可以在請求中使用Range header來指定遠程資源的數據範圍。如果它是1MB文件,我可以要求從600k到700k的字節。

在FTP中有類似的東西嗎?我正在閱讀the FTP RFC,沒有看到任何東西,但想確保我沒有遺漏任何東西。

在FTP中有一個重新啓動命令 - 會工作嗎?


附錄
越來越Brian Bondy's answer below後,我寫了一個包裝FTP只讀Stream類。它基於REST謂詞支持通過FTP讀取的資源上的Seek()和Read()操作。
http://cheeso.members.winisp.net/srcview.aspx?dir=streams&file=FtpReadStream.cs

搜尋這是非常緩慢的SEEK(),因爲建立數據插座需要很長的時間。當您在BufferedStream中包裝該流時,會獲得最佳結果。

回答

6

是的,你可以使用REST命令。

REST設置應開始後續文件傳輸的點。它通常用於重新啓動中斷傳輸。該命令必須在RETRSTOR之前出現,因此在PORTPASV之後。

從FTP的RFC 959:

RESTART(REST)參數域 表示服務器標記處 文件傳送將被重新啓動。此 命令不會導致文件傳輸 ,而是跳過文件到 指定的數據檢查點。這個 命令應該被緊跟在 之後的相應的FTP服務命令 ,這將導致文件傳輸到 恢復。

瞭解更多: http://www.faqs.org/rfcs/rfc959.html#ixzz0jZp8azux

+0

優秀。這設定了範圍的開始,這是答案的前半部分。設置範圍的結束是另一半。我認爲FTP中沒有任何東西存在,所以...我想客戶端需要停止傳輸*。也許發送中止命令。需要測試。 – Cheeso 2010-03-29 15:23:16

+0

@Cheeso:是的,這是正確的,一旦你有足夠的數據,你會發送一個ABOR或斷開數據連接。 – 2010-03-29 15:36:19

+0

嘗試完成後,它似乎工作正常。謝謝。 – Cheeso 2010-03-29 18:37:48

1

你應該看看GridFTP怎麼做並行傳輸。這就是使用你想要的那種技術(並且實際上可能是代碼,它最好借用而不是從頭開始實現)。