Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Загрузка и Сохранение Изображений из Интернета в Базу SQLite без Среднего Шага: Интеграция с Delphi

Delphi , Базы данных , SQL

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


Введение

В современном мире разработки программного обеспечения часто возникает необходимость работы с данными, поступающими из различных источников, в том числе и из интернета. Одной из таких задач является загрузка изображений из интернета и их сохранение в базу данных. В этой статье мы рассмотрим, как можно решить данную задачу, используя язык программирования Object Pascal и среду разработки Delphi.

Основная Часть

Загрузка Изображения

Для начала рассмотрим, как можно загрузить изображение из интернета в память программы. Для этого мы будем использовать компонент TIdHTTP из библиотеки Indy, который позволяет выполнять HTTP-запросы. Пример кода для загрузки изображения в поток TMemoryStream:

procedure TForm1.Button2Click(Sender: TObject);
var
  Strm: TMemoryStream;
  HTTP: TIdHTTP;
  LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  try
    HTTP := TIdHTTP.Create;
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    Strm := TMemoryStream.Create;
    HTTP.IOHandler := LHandler;
    HTTP.HandleRedirects := True;
    HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
    try
      HTTP.Get('https://www.TheUrl.com/pictures/Photo.ashx?theid=221', Strm);
      // Очистка позиции потока перед дальнейшим использованием
      Strm.Position := 0;
    finally
      HTTP.Free;
      LHandler.Free;
      Strm.Free;
    end;
  except
    on E: Exception do
    begin
      ShowMessage(E.ClassName + ' error raised, with message : ' + E.Message);
      ShowMessage('Could not download file');
    end;
  end;
end;
Сохранение Изображения в Базу Данных

Теперь рассмотрим, как можно сохранить изображение, уже находящееся в локальной файловой системе, в базу данных SQLite. Для этого используется компонент DISQLite3Database, который предоставляет методы для работы с запросами. Важно отметить, что для параметров запросов можно использовать метод LoadFromFile, который позволяет загрузить данные из файла:

procedure TForm1.Button1Click(Sender: TObject);
begin
  DISQLite3Database1.DatabaseName := 'C:\testphoto.db';
  DISQLite3Database1.Open;
  try
    Query1.Close;
    Query1.SelectSQL := 'INSERT INTO StudentPhotos(id, photo) VALUES (:id, :photo)';
    Query1.Params.ParamByName('photo').LoadFromFile(
      'C:\Users\Admin\Documents\testpic2.jpg', ftGraphic);
    // Заменить 'sally' на реальный идентификатор изображения
    Query1.Params.ParamByName('id').AsString := 'sally';
    Query1.Open;
  finally
    DISQLite3Database1.Close;
  end;
end;
Интеграция Загрузки и Сохранения

Чтобы объединить загрузку изображения из интернета и его сохранение в базу данных, необходимо использовать метод LoadFromStream для параметров запроса. Этот метод позволяет загружать данные из потока, что идеально подходит для нашей задачи. Пример кода, который объединяет предыдущие процедуры:

procedure TForm1.SaveImageFromURL(Sender: TObject);
var
  Strm: TMemoryStream;
  HTTP: TIdHTTP;
  LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  Strm := TMemoryStream.Create;
  try
    HTTP := TIdHTTP.Create;
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    HTTP.IOHandler := LHandler;
    HTTP.HandleRedirects := True;
    HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
    try
      HTTP.Get('https://www.TheUrl.com/pictures/Photo.ashx?theid=221', Strm);
      Strm.Position := 0;
      DISQLite3Database1.DatabaseName := 'C:\testphoto.db';
      DISQLite3Database1.Open;
      try
        Query1.Close;
        Query1.SelectSQL := 'INSERT INTO StudentPhotos(id, photo) VALUES (:id, :photo)';
        Query1.Params.ParamByName('photo').LoadFromStream(Strm, ftGraphic);
        // Заменить 'sally' на реальный идентификатор изображения
        Query1.Params.ParamByName('id').AsString := 'sally';
        Query1.Open;
      finally
        DISQLite3Database1.Close;
      end;
    finally
      HTTP.Free;
      LHandler.Free;
    end;
  finally
    Strm.Free;
  end;
end;

Заключение

В данной статье мы рассмотрели, как можно загрузить изображение из интернета в память программы, а затем напрямую сохранить его в базу данных SQLite, минуя этап сохранения на жесткий диск. Это позволяет ускорить процесс и упростить код программы. Использование потоков данных и параметров запроса в базе данных является ключевым моментом в решении данной задачи.

Создано по материалам из источника по ссылке.

Статья описывает процесс загрузки изображений из интернета и их непосредственного сохранения в базу данных SQLite без промежуточного этапа сохранения на жесткий диск клиента, используя среду разработки Delphi и язык Object Pascal.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: SQL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 13:40:24/0.0035400390625/0