Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизСохранение файла из потока Найти похожие ветки
← →
Дмитрий (2012-03-12 01:24) [0]Добрый вечер.
Использую IdhttpProxyServer.
Задача сохранить все картинки проходящие через прокси на локальный диск.
На сколько понимаю картинки проходящие через прокси надо отлавливать в событии OnHTTPDocument в потоке VStream: TStream.
Пробую так но ничего не выходит. Подскажите что не правильно делаю.
procedure TForm1.test(ASender: TIdHTTPProxyServer; const ADocument: String;
var VStream: TStream; const AHeaders: TIdHeaderList);
var
Stream2: TFileStream;
IntBuf: array[0..9] of Integer;
begin
if(Pos(".gif",ADocument)>0) then
begin
Stream2 := TFileStream.Create("1.gif", fmOpenWrite);
Stream2.Seek(0, soFromEnd);
Stream2.CopyFrom(VStream, VStream.Size);
Stream2.Free;
end;
end;
← →
Ega23 © (2012-03-12 01:41) [1]1. fmCreate ?
2. А нафига Seek ?
← →
Дмитрий (2012-03-12 01:56) [2]Файл создался но полностью пустой :(
← →
KilkennyCat © (2012-03-12 03:19) [3]
> 2. А нафига Seek ?
видел я такой пример в сети...
> Дмитрий (12.03.12 01:24)
где будет "голова винчестера" после выполнения Stream2.Seek(0, soFromEnd); ?
← →
KilkennyCat © (2012-03-12 03:22) [4]
> Дмитрий (12.03.12 01:56) [2]
>
> Файл создался но полностью пустой :(
и еще вопрос. что будет при TFileStream.Create("1.gif", fmCreate); если файл уже есть?
← →
Дмитрий (2012-03-12 03:41) [5]Не понятно что за тестирование. Но я сделал по совету Ega23. Убрал seek и заменил fmOpenWrite на fmCreate or fmOpenWrite. Результат не изменился.
← →
Anatoly Podgoretsky © (2012-03-12 08:20) [6]> Дмитрий (12.03.2012 03:41:05) [5]
Seek убирать нельзя
← →
stas © (2012-03-12 14:41) [7]Дмитрий (12.03.12 03:41) [5]
А чему равен VStream.Size ?
← →
sniknik © (2012-03-12 15:03) [8]> А чему равен VStream.Size ?
нулю естественно, т.к. данные еще не получены.
← →
stas © (2012-03-12 15:42) [9]И почему var VStream: TStream; ?
← →
Дмитрий (2012-03-12 17:44) [10]
> И почему var VStream: TStream; ?
Потому что в IndyHttpProxyServer так )
Пробую так. То файл записывается то не записывается....
function PosR2L(): String;
function InvertS(const S: string): string;
var
i, Len: Integer;
begin
Len := Length(S);
SetLength(Result, Len);
for i := 1 to Len do
Result[i] := S[Len - i + 1];
end;
var
ps: Integer;
begin
ps := Pos(InvertS("/"), InvertS(b));
if ps <> 0 then
begin
ps:=Length(b) - Length("/") - ps + 3;
Result := Copy(b,ps,Length(b));
Delete(b, ps, Length(Result) + 1);
end else
Result := "0";
end;
procedure TForm1.test(ASender: TIdHTTPProxyServer; const ADocument: String;
var VStream: TStream; const AHeaders: TIdHeaderList);
var
FS : TFileStream;
i:String;
begin
if(Pos(".gif",ADocument)>0) or (Pos(".jpg",ADocument)>0) or (Pos(".swf",ADocument)>0) or (Pos(".js",ADocument)>0) or (Pos(".css",ADocument)>0) or (Pos(".png",ADocument)>0) or (Pos(".xml",ADocument)>0) then
begin
b:=ADocument;
i := PosR2L();
b:=StringReplace(b, "/", "\",[rfReplaceAll]);
mmo1.Lines.Add("C:\Users\carlson\Desktop\1"+b+i);
if not DirectoryExists("C:\Users\carlson\Desktop\1"+b) then
ForceDirectories("C:\Users\carlson\Desktop\1"+b);
if not FileExists("C:\Users\carlson\Desktop\1"+b+i) then
begin
if (VStream.Size > 100000) then
Begin
ShowMessage("1");
FS := TFileStream.Create("C:\Users\carlson\Desktop\1"+b+i, fmCreate);
FS.CopyFrom(VStream, VStream.Size);
FS.Free;
End;
end;
end;
end;
← →
stas © (2012-03-12 18:00) [11]Потому что в IndyHttpProxyServer так )
Возможно это ошибка, но если var, то подразумевается, что VStream примет значение.
>То файл записывается то не записывается....
Я так понимаю если VStream.Size > 100000, то записывается иначе - нет.
← →
Дмитрий (2012-03-12 18:09) [12]
> Потому что в IndyHttpProxyServer так )
> Возможно это ошибка, но если var, то подразумевается, что
> VStream примет значение.
> >То файл записывается то не записывается....
> Я так понимаю если VStream.Size > 100000, то записывается
> иначе - нет.
Не знаю. Поставил последний инди. Там было так когда создаешь событие OnHttpDocument.
А насчет размера. Если ставлю размер 1000 то все равно то записывается то не записывается.
← →
stas © (2012-03-12 18:21) [13]Выводите в ListBox имя файла + размер что получится?
← →
Дмитрий (2012-03-12 18:22) [14]В общем все оказалось проще чем есть) Дело в том что я тестировал на FF это дело. А он как любой нормальный браузер кеширует и повторно не загружает с сервера. Из-за чего через прокси не проходили данные и не происходила запись в файл))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.08 c