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

  • Автор темы Автор темы Lomanu4
  • Дата начала Дата начала

Lomanu4

Команда форума
Администратор
Ofline
Тут показыватся много хороших примеров, это работа с анонимными потоками,загрузка изображения и так же вы можете понять как сохранять даэе ту самую фото на сервер, при этом получая только ссылку на нее.
Код:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.Objects, FMX.Edit;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Layout1: TLayout;
    ProgressBar1: TProgressBar;
    Edit1: TEdit;
    Label1: TLabel;
    Layout2: TLayout;
    Layout3: TLayout;
    Layout4: TLayout;
    procedure Button1Click(Sender: TObject);
  private
    procedure HttpReceiveData(
      const Sender: TObject;
      iContentLength, iReadCount: Int64;
      var ioAbort: Boolean);
  public
  end;

var
  Form1: TForm1;

implementation

uses
  System.IOUtils
  , System.Net.HttpClient
  , uFileStreamFixForAndroid4
  ;

{$R *.fmx}

const
  URL = 'https://qiita-image-store.s3.amazonaws.com/0/12977/af4a05d5-dea6-979e-c367-d80241056406.png';

procedure TForm1.Button1Click(Sender: TObject);
begin
  ProgressBar1.Value := 0;

  TThread.CreateAnonymousThread(
    procedure
    var
      Http: THttpClient;
      FS: TFileSTream;
      FileName: String;
      Size: Integer;
    begin
      FileName := TPath.Combine(TPath.GetDocumentsPath, 'test.jpg');

      FS := TFileStream.Create(FileName, fmCreate, $1ff);
      try
        Http := THttpClient.Create;
        try
          Http.HandleRedirects := True;
          Http.OnReceiveData := HttpReceiveData;

          Http.Get(URL, FS);

          Size := FS.Size;
        finally
          Http.DisposeOf;
        end;
      finally
        FS.DisposeOf;
      end;

      TThread.Synchronize(
        TThread.Current,
        procedure
        begin
          Edit1.Text := Size.ToString;
          Image1.Bitmap.LoadFromFile(FileName);
        end
      );
    end
  ).Start;
end;

procedure TForm1.HttpReceiveData(
  const Sender: TObject;
  iContentLength, iReadCount: Int64;
  var ioAbort: Boolean);
begin
  TThread.Synchronize(
    TThread.Current,
    procedure
    begin
      ProgressBar1.Max := iContentLength;
      ProgressBar1.Value := iReadCount;
    end
  );
end;

end.
 
Назад
Сверху Снизу