Текущий архив: 2019.03.17;
Скачать: CL | DM;
Вниз
Скачивание без сохранения в Synapse Найти похожие ветки
← →
Artem78 © (2016-11-13 15:34) [0]На сервере лежит большой файл. Нужно для сервера произвести "имитацию" скачивания файла - т.е. просто передать файл без дальнейшей обработки (а-ля wget mysite.com > /dev/null). Но Synapse целиком загружает файл в память программы. Можно ли сделать, чтобы при получении порции данных она сразу же удалялась из памяти?
← →
kilkennycat © (2016-11-14 12:47) [1]Если исходники доступны - можно. Если недоступны - нет.
← →
iop © (2016-11-14 12:57) [2]Нужно для сервера произвести "имитацию" скачивания файла -
тестирование сервера?
ну так ему вообще пофик сохраняется ли там файл на диск, помещается ли он целиком в памяти, читается ли кусочками и т.д.
тестируй его браузером.
← →
Artem78 © (2016-11-15 02:45) [3]
> Если исходники доступны - можно. Если недоступны - нет.
Не понял чьи исходники, поясните.
> тестирование сервера?
Нет не это. Нужно просто скачать файл без сохранения. Чтобы трафик пошёл. Цитирую заказчика: "Мы не сервер обманываем, а провайдер (по задумке) :)". И обязательно через Synapse, так в остальной части проекта мы его везде используем.
У меня сейчас в коде есть типа этого:with THTTPSend.Create do
try
Sock.OnStatus:=Status;
HTTPMethod("GET", Url);
finally
free;
end;
Может, например, есть какая-либо возможность в Sock.OnStatus очищать принимающий буфер при получении очередной порции данных?
← →
iop © (2016-11-15 10:59) [4]серверу пофик на твои буфера.
провайдеру фиолетово вообще на все.
они оба не в курсе твоих телодвижений с выкачанными байтами.
Мы не сервер обманываем, а провайдер
никого кроме себя самих вы не обманываете.
← →
kilkennycat © (2016-11-15 13:45) [5]
> Не понял чьи исходники, поясните.
Synapse, разумеется. Неужели были еще варианты?
← →
kilkennycat © (2016-11-15 13:52) [6]
> iop © (15.11.16 10:59) [4]
в сочетании с
> И обязательно через Synapse, так в остальной части проекта мы его везде используем.
они там уже трижды себя обманули
← →
Artem78 © (2016-11-15 14:46) [7]Мне заказчик подробности зачем ему это нужно не разъясняет, моё дело делать так как велят, а не допрашивать. Вместо того чтобы разглагольствовать, могли бы на изначальный вопрос помочь ответить. Ну возьмём например какой-нибудь Download менеджер. Он же не загружает весь гигабайт в память, а потом сохраняет на диск. Он его скачивает небольшими частями и часть сразу сохраняет. Неужели невозможно с Синапсисом сделать также, только без сохранения?
← →
iop © (2016-11-15 14:54) [8]Он же не загружает весь гигабайт в память
естественно не загружает.
его же не артемка писал, а программисты.
← →
stas © (2016-11-15 14:56) [9]http://www.webdelphi.ru/2011/07/biblioteka-synapse-rabota-s-modulem-httpsend-pas/#rangestart_rangeend ?
← →
iop © (2016-11-15 15:14) [10]Но Synapse целиком загружает файл в память программы
Брехня.
function HttpGetBinary(const URL: string; const Response: TStream): Boolean;
← →
iop © (2016-11-15 15:27) [11]ухаха.
синапс - гениальная либа.
function HttpGetBinary(const URL: string; const Response: TStream): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
Result := HTTP.HTTPMethod("GET", URL);
if Result then
begin
Response.Seek(0, soFromBeginning);
Response.CopyFrom(HTTP.Document, 0);
end;
finally
HTTP.Free;
end;
end;
HTTP.Document = мемори стрим.
← →
Artem78 © (2016-11-15 17:27) [12]
> Но Synapse целиком загружает файл в память программы
>
> Брехня.
iop, Вот смотрите.
До запуска скачивания: http://itmages.ru/image/view/5189442/b6f30176
И через пару минут: http://itmages.ru/image/view/5189443/2bee8cd9
Что же тогда съело память если не Синапс?
Вот накидал демку, взгляните сами: https://yadi.sk/d/wgA6qb04yg6Ht
← →
iop © (2016-11-15 17:38) [13]зачем?
я же написал выше что либа "гениальная"
← →
Artem78 © (2016-11-15 17:43) [14]Ну и что вы предлагаете, весь проект переписать на Indy? Боюсь заказчик мне за это денег не накинет, бюджет и так "впритык"...
← →
iop © (2016-11-15 17:52) [15]предлагаю сказать заказчику, что ему просто не повезло с подрядчиком.
← →
iop © (2016-11-15 18:13) [16]есть у тебя два паблишед свойства
property Document: TMemoryStream read FDocument;
property Sock: TTCPBlockSocket read FSock;
вешаешь на Sock onStatus, и в нем на HR_ReadCount при размере скачанного кратном допустим мегабайту чистишь текущий документ в ноль.
← →
stas © (2016-11-15 18:43) [17]
> Ну и что вы предлагаете, весь проект переписать на Indy?
Можно WinApi использовать.
← →
stas © (2016-11-15 18:44) [18]Artem78 ©
А что stas © (15.11.16 14:56) [9] не подходит?
← →
Artem78 © (2016-11-15 19:14) [19]Читаю... А нет какой-нибудь готовой функции-обёртки с уже реализованым циклом, обработкой заголовка, проверкой поддержки сервером range и пр.?
← →
stas © (2016-11-15 19:26) [20]Artem78 © (15.11.16 19:14) [19]
по ссылке пример есть, который можно скачать.
Страницы: 1 вся ветка
Текущий архив: 2019.03.17;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.004 c