int QFtp::get(const QString &file, QIODevice *dev, qulonglong size, TransferType type)
{
QStringList cmds;
if (type == Binary)
cmds << QLatin1String("TYPE Irn");
else
cmds << QLatin1String("TYPE Arn");
cmds << QLatin1String("SIZE ") + file + QLatin1String("rn");
cmds << QLatin1String(d->transferMode == Passive ? "PASVrn" : "PORTrn");
if (size > 0)
{
cmds << QLatin1String("REST ") + QString::number(size) + QLatin1String("rn");//添加REST命令
}
cmds << QLatin1String("RETR ") + file + QLatin1String("rn"); return d->addCommand(new QFtpCommand(Get, cmds, dev));
}
斷點續傳的下載用這個可以了,上傳呢,怎么獲取服務端檔案大小呢
uj5u.com熱心網友回復:
可以和服務器制定一個通訊協議啊,協議里面包含訊息型別,資料長度。有需要的話服務器把資料長度回傳給客戶端uj5u.com熱心網友回復:
QFtp實作的不是很好,如果哪位有好方法,貼上來就太棒了。斷點上傳,是不是用 libcurl更好一點。這有個東東,看一下不知道有沒有用。
http://www.xuebuyuan.com/1445922.html
uj5u.com熱心網友回復:
事實上不推薦用QFtp,因為BUG實在太多了,傳輸檔案Qt有QNetworkAccessManager,QNetworkRequest,QNetworkReply組合使用uj5u.com熱心網友回復:
FTP的REST指令是告訴服務器從檔案哪個位置開始下載,但是還沒指定檔案,然后就需要向服務器發送RETR+檔案名命令,通知服務器要下載的檔案名,這時服務器開始定位檔案指標并發送資料斷點上傳的話要先獲取服務器上檔案和本地同名的檔案的大小,然后向服務器發送APPE+檔案名的命令,表明資料要添加到這個檔案的末尾;因為獲取到了遠程檔案大小,就可以從本地檔案指標的位置,從該位置發送資料就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/15451.html
標籤:Qt
