Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

проблема с загрузкой файлов через TIdHTTP   Найти похожие ветки 

 
hbreaker   (2006-06-16 17:32) [0]

вот есть у меня такая процедура, должна скачивать файл и сохранять его в temp каталоге. Но почему-то выскакивает такое сообщение при вызове fIdHTTP.Get
Project Photoportal.exe raised exception class EConvertError with message """ is not a valid integer value". Process stopped. Use Step or Run to continue.

procedure TGetPhotosThread.GetPhoto(photo_id:integer);
var
 strm: TFileStream;
 s: string;
begin
 try
   strm := TFileStream.Create(temp+inttostr(photo_id)+".jpg",fmCreate);
   s := "http://photoportal.dream.ua/soap/get_photo.php?session="+session+"&id="+inttostr(photo_id);
   fIdHTTP.Get(s);
   strm.CopyFrom(fIdHTTP.Response.ContentStream,fIdHTTP.Response.ContentStream.Size );
 finally
   strm.Free;
 end;
end;


fIdHTTP создается в конструкторе класса

constructor TGetPhotosThread.Create(_photos: PhotosStructArray; _temp: string; _session:string);
begin
 inherited Create(True);
 photos := _photos;
 temp := _temp;
 session := _session;
 fIdHTTP := TIdHTTP.Create(nil);
 Resume; // запустить
end;


 
tesseract ©   (2006-06-16 18:09) [1]


> inttostr(photo_id)

Здесь error, когда длина photo_id равна нулю, его нельзя преобразовывать в integer.


 
hbreaker   (2006-06-16 18:20) [2]

в смысле длина photo_id равна нулю ?

у меня строка s нормально формируется. ошибка когда идет вызов  fIdHTTP.Get(s);


 
Dmitrij_K   (2006-06-16 18:22) [3]

Первое, почему не IdHTTP.Get(s, strm)
Второе, ошибка в самом инди, пользуйся отладчиком и смотри где строка в число преобразуется


 
Dmitrij_K   (2006-06-16 18:28) [4]

Инди плохо реагирует на нестандартный заголовок, как-то давно пришлось в коде idhttp try except писать, т.к. сервер давал данные не в том формате


 
hbreaker   (2006-06-16 18:32) [5]

IdHTTP.Get(s, strm)
пробовал тоже самое... думал так будет:)
если не idhttp то чем ещё можно?
может.. как-то на сокетах. но если нада через прокси.. я пока не умею. где можно найти инфу на эту тему?


 
Slym ©   (2006-06-19 05:24) [6]

закачка по маске?
смотри почту...


 
hbreaker   (2006-06-19 18:23) [7]

нашел такую функцию, которая использует только WinInet + может работать через проки.

uses WinInet;

function DownloadFile(const FileURL, FileName: String): Cardinal;
var
hSession, hFile: HInternet;
Buffer: array[1..1024] of Byte;
BufferLen, fSize: LongWord;
f: File;
begin
Result := 0;
hSession := InternetOpen(’STEROID Download’,
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hSession) then
begin
hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
INTERNET_FLAG_RELOAD, 0);
if Assigned(hFile) then
begin
AssignFile(f, FileName);
Rewrite(f,1);
fSize := 0;
repeat
InternetReadFile(hFile, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen);
fSize := fSize + BufferLen;
until (BufferLen = 0);
CloseFile(f);
Result := fSize;
InternetCloseHandle(hFile);
end;
InternetCloseHandle(hSession);
end;
end;

Всё работает:))



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
2-1161155855
Alex_C
2006-10-18 11:17
2006.11.05
Как правильно написать свой компонент?


15-1161055357
Slider007
2006-10-17 07:22
2006.11.05
С днем рождения ! 17 октября


15-1160810236
dimonf
2006-10-14 11:17
2006.11.05
Прочитай и задумайся


1-1159172427
Bless
2006-09-25 12:20
2006.11.05
Можно ли из procedure of object получить ссылку на объект


3-1157904807
Kley
2006-09-10 20:13
2006.11.05
Sql запрос