Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Cкачка части файла


Автор: lukash256 17.6.2008, 20:59
Народ помогите! диплом стоит.
нужно "выдать" клиенту часть файла по http. к примеру с 300 байта по 800
делаю 
Код

procedure IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ContentLength:=500;
AResponseInfo.ContentStream:=tFilestream.Create('E:\DPLOM\Share\498155-1.file',fmShareDenyNone);
AResponseInfo.ContentStream.Position:=300;
end;


а клиент получает первые 500 байт.
как сделать помогите. оч нужно!

Автор: Snowy 18.6.2008, 11:40
Считай нужную часть файла в MemoryStream и отдай его.

Автор: lukash256 18.6.2008, 14:44
СПС. я так и сделал но при обьеме озу 2048мБ удалось скачать файл метров 300-350(((

а есть другие варианты?

Автор: Snowy 18.6.2008, 15:14
Другой вариант - написать свой наследник от TFileStream, который не будет скидываться на начало.
Перекрыть у него Seek так, тобы он игнорировал смещение на начало файла.

Автор: lukash256 18.6.2008, 18:32
ясно. интересная идея, но я не совсем понял ты хочешь сделать наследник без Seek, или чтоб при вызове Seek(0,soFromBegin) выполнялось seek(300,sofromBegin).

(сейчас не дома) пишу по пямяти извеняйте за возможную не корректность но суть вроде передал

Автор: lukash256 18.6.2008, 19:57
Всмысле при Seek(0,soFromBegin) выполнять Seek(300,soFromBegin) ?

сори за возможную не сорректность пишу не с дома

Автор: Snowy 18.6.2008, 20:20
Нет. Просто игнорировать ноль.
Если в параметре ноль - не выполнять никаких действий.
Иначе (если не ноль) вызывать inherited.
Таким образом ты заблокируешь установку в начало стрима и передача пойдёт с установленной ранее позиции.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)