Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 16:01   #1
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию Скачивание с редиректом

Народ подскажите как скачать файл. У меня есть ссылка по нажатию которой происходит редирект на нужный файл. Когда пытаюсь скачать то мне скачивает пустую страничку. Подскажите плиз как сделать чтобы скачался файл. Качаю так
Код:
procedure DownloadFileFromUrl(url,filepath: string; progress: boolean);
 var hInet,hURL: HINTERNET;
  fSize,ReadLen,RestartPos: DWORD;
  fBuf: array[1..1024] of byte;
  f: file;
  Header: string;
begin
  MainForm.DownLoadProgress.Visible:= progress;
  RestartPos := 0; //<- |инициализация
  fSize := 0; //<- |переменных
  //Если на винте есть файл то считаем, что нужно докачивать
  if FileExists(filepath) then
  begin
    AssignFile(f, filepath);
    Reset(f, 1);
    RestartPos := FileSize(F);
    Seek(F, FileSize(F));
  end
  else
  begin
    //иначе с начала
    AssignFile(f, filepath);
    ReWrite(f, 1);
  end;
  //открываем сессию
  hInet := InternetOpen('my app',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
  //Пишем дополнительную строку для заголовка
  Header := 'Accept: */*';
  //открываем URL
  hURL := InternetOpenURL(hInet,PChar(url),pchar(Header),StrLen(pchar(Header)),0,0);
  //устанавливаем позицию в файле для докачки
  if RestartPos > 0 then
    InternetSetFilePointer(hURL,RestartPos,nil,0,0);
  //смотрим ск-ко надо скачать
  InternetQueryDataAvailable(hURL, fSize, 0, 0);
  //ShowMessage(inttostr(ReadLen));
  if RestartPos > 0 then
  begin
    MainForm.DownLoadProgress.MinValue := 0;
    MainForm.DownLoadProgress.MaxValue := fSize + RestartPos;
    MainForm.DownLoadProgress.Progress := RestartPos;
  end
  else
  begin
    MainForm.DownLoadProgress.MinValue := 0;
    MainForm.DownLoadProgress.MaxValue := ReadLen;//fSize + RestartPos;
  end;
  //качаем до тех пор пока реально прочитаное число байт не
  //будет равно нулю или не стор
  while (ReadLen <> 0) do
  begin
    //читаем в буфер
    Application.ProcessMessages;
    InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen);
    //смотрим ск-ко осталось докачать
    InternetQueryDataAvailable(hURL, fSize, 0, 0);
    //Form1.DownLoadProgress.Progress:= Form1.DownLoadProgress.Progress + fSize;
    //Form1.Log.Lines.Add(inttostr(fSize));
    BlockWrite(f, fBuf, ReadLen); //<-пишем в файл
  end;
  //ShowMessage(inttostr(FileSize(f)));
  InternetCloseHandle(hURL); //<-|закрываем
  InternetCloseHandle(hInet); //<-|сесcии
  CloseFile(f); //<-|и файл
  MainForm.DownLoadProgress.Visible:= false;
  ShowMessage('Закачка завершена');
end;
alexprey вне форума Ответить с цитированием
Старый 15.09.2010, 19:21   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Используй инди. Для прогресса - событие onWork
TwiX вне форума Ответить с цитированием
Старый 16.09.2010, 16:41   #3
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

TidFTP??? или какой??? я просто инди не особо знаю
alexprey вне форума Ответить с цитированием
Старый 17.09.2010, 19:19   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

TIdHTTP.Get
TwiX вне форума Ответить с цитированием
Старый 18.09.2010, 15:15   #5
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Ну вот теперь качаю так
Код:
Data:= TMemoryStream.Create;
 try
  Downloader.Get(url,Data);
 finally
  Data.SaveToFile(GetFileName(url));
  Data.Free;
 end;
Но выдает 302 ошибку
alexprey вне форума Ответить с цитированием
Старый 18.09.2010, 15:19   #6
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

И не работает все равно редирект.
alexprey вне форума Ответить с цитированием
Старый 18.09.2010, 16:54   #7
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

У idHhttp поставьте свойство редиректа в true (AllowRedirects)
Denager вне форума Ответить с цитированием
Старый 18.09.2010, 17:18   #8
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

во спс, теперь работает
alexprey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скачивание файла fezilk24 Работа с сетью в Delphi 16 07.02.2011 18:35
Скачивание файлов из инета jkpro Работа с сетью в Delphi 10 12.09.2009 17:07
Скачивание файла Lemo Помощь студентам 16 28.07.2009 22:54
скачивание сайта Лубышев Софт 2 09.03.2008 20:43
Неправильная ссылка на скачивание nickki О форуме и сайтах клуба 2 01.04.2007 12:10