Перейти к содержанию
Fire Monkey от А до Я
  • 0

Загрузка файлов из интернета


ra.eremeev

Вопрос

Друзья, стоит задача по обмену служебными данными с WEB-сервера (файл базы данных) - можно через FTP, можно через HTTP.

Подскажите, пож-та, как обеспечить получение приложением файла из инета? Желательно с возможностью проверки целостности передачи...

Пробовал TiDFTP, но все время файлы битые получаются :(

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Спасибо за ответ!

Нет, не забыл :(

Но работает не стабильно - в некоторых случаях файл получается битым. А иногда и не грузится вовсе - приложение висит просто... Ошибок не выдает :(

Инет есть и на других устройствах он стабилен...

Подскажите, пож-та, как можно контролировать наличие соединения с Инетом?

Ссылка на комментарий
  • 0
Stream:=TMemoryStream.Create;
IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream);
Stream.SaveToFile('C:\1.rar');
Stream.Free;

Что бы программа не завис при загрузки файла, нужно использовать поток.

Изменено пользователем Axbor
Ссылка на комментарий
  • 0

Axbor, спасибо!

Т.е., загрузку файла (код, который предложен) запускать через поток?

Верно?

И еще вопрос: без потока приложение будет всегда зависать с этим кодом, или только при загрузке больших файлов или при слабом соединении?

Изменено пользователем ra.eremeev
Ссылка на комментарий
  • 0
Stream:=TMemoryStream.Create;
IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream);
Stream.SaveToFile('C:\1.rar');
Stream.Free;

Что бы программа не завис при загрузки файла, нужно использовать поток.

 

 

А как запихнуть этот код в поток? что бы параллельно работала программа и скачивался файл. Пример можно в студию

Ссылка на комментарий
  • 0
  • Модераторы
uses System.Threading;

TTask.Run(procedure
begin
  Stream:=TMemoryStream.Create;
  IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream);
  Stream.SaveToFile('C:\1.rar');
  Stream.Free;
end);
Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
uses System.Threading;

TTask.Run(procedure
begin
  Stream:=TMemoryStream.Create;
  IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream);
  Stream.SaveToFile('C:\1.rar');
  Stream.Free;
end);

ZuBy, а как Ваш код будет на С++ Builder выглядеть? Спасибо.

Ссылка на комментарий
  • 0
  • Модераторы

 

uses System.Threading;

TTask.Run(procedure
begin
  Stream:=TMemoryStream.Create;
  IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream);
  Stream.SaveToFile('C:\1.rar');
  Stream.Free;
end);

ZuBy, а как Ваш код будет на С++ Builder выглядеть? Спасибо.

 

не силен в С++, но думаю также

#include <System.Threading.hpp>

TTask::Run(_di_TProc(// тут остальной код)));

справочка

Ссылка на комментарий
  • 0
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TThread::Synchronize(TThread::CurrentThread, getFile);
}
void TForm1::getFile()
{
TMemoryStream *MS = new TMemoryStream;
IdHTTP1->Get("YOUR URL", MS);
MS->SaveToFile("*.*");
delete MS;
}
Изменено пользователем Axbor
Ссылка на комментарий
  • 0
#include <System.Threading.hpp>

TTask::Run(_di_TProc(// тут остальной код)));

Чем отличается  TThread::Synchronize(TThread::CurrentThread, getFile); от вашего кода TTask::Run(_di_TProc());

что где лучше использовать?

Ссылка на комментарий
  • 0

Друзья, спасибо!

 

Вот какой вопрос возник по теме: может ли работа iDHTTP и частое использование команды Bitmap.LoadFromUrl (uses FMX.Features.Bitmap.Helpers) восприниматься веб-сервером как DDOS-атака?

Именно так вебмауэр моего хостинг-провайдера реагирует на работу этих компонентов/команд.

 

После 200-300 обращений происходит блокирование моего IP.

 

В работе приложения активно используются графические изображения, подгружаемые с сервера через Bitmap.LoadFromUrl (приложение отображает список мероприятий, и для каждого мероприятия на сервере имеется свой небольшой графический файл-афиша размером 15-20 кБ).

 

Зацикливаний и пустой долбежки в коде нет.

Но блокировки есть.

 

Может, не те компоненты/решение выбрал.

 

Что посоветуете в такой ситуации?

Ссылка на комментарий
  • 0

Сам отвечу на свой же вопрос: DDOS-атака идентифицируется благодаря Bitmap.LoadFromUrl (uses FMX.Features.Bitmap.Helpers).

В процедуре используется связка: инициализация idhttp и закрытие соединения (удаление) idhttp.

Множественные сессии и вызывают схожесть с DDOS...

Ссылка на комментарий
  • 0

По теме вопрос IdHttp компонент как настроить для подключения без SSL

или место него какой компонент использовать?

а то приходится таскать библиотеки для SSL

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...