Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   subir ftp (https://www.clubdelphi.com/foros/showthread.php?t=96106)

esublim 13-02-2023 23:02:26

subir ftp
 
hola amigos tengo el siguiente codigo y todo funciona muy bien. la pregunta es la siguiente:
como hago para subir a ftp una imagen pero directo del from o de un stream. es decir tengo un timagen y que me lea la imagen desde alli y la suba por ftp

Código Delphi [-]
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdExplicitTLSClientServerBase, IdFTP, FMX.Controls.Presentation, FMX.StdCtrls,
  FMX.Objects, IdHTTP;

type
  TForm1 = class(TForm)
    IdFTP1: TIdFTP;
    Image1: TImage;
    bt_guardar: TButton;
    Button3: TButton;
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    Button2: TButton;
    procedure bt_guardarClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure PedirImagen( URL, FICHERO, DIR_DESTINO:string );
  var
    Stream      : TFileStream;
  begin
  { re-crear el DIRECTORIO de destino por si no estuviese }
    ForceDirectories( DIR_DESTINO );
    Stream  := TFileStream.Create( DIR_DESTINO + '\' + FICHERO, fmCreate);
    try
      Form1.IdHTTP1.Get ( URL + '/' + FICHERO, Stream );
    finally
      Stream.Free;
    end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var imagenstream : TStringSTream;
begin
  imagenstream := TStringStream.Create('');
  Form1.IdHTTP1.Get('http://192.168.1.185/adae/1.jpg', imagenstream);
  Image1.Bitmap.LoadFromStream(imagenstream);
end;

procedure TForm1.bt_guardarClick(Sender: TObject);
begin
PedirImagen( 'http://192.168.1.185/adae', '1.jpg', 'A:\' );
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

 IdFTP1.Username:= 'jaguero';
 IdFTP1.Password:= '123456789';
 IdFTP1.Port:= 21;
 IdFTP1.Host:= '192.168.1.185';


 try

  IdFTP1.Connect;
  IdFTP1.Put( 'img/img1.jpg', ExtractFileName( 'image1.jpg' ), false );
  showmessage('Listo');
  IdFTP1.Disconnect;

 except

   showmessage('Negativo');

 end;

end;

end.

Neftali [Germán.Estévez] 14-02-2023 08:51:37

Utiliza un TMemoryStream y vuelca directamente el contenido del TImage al Stream.

Más o menos siguiendo el código que has puesto...
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
begin

  IdFTP1.Username:= 'jaguero';
  IdFTP1.Password:= '123456789';
  IdFTP1.Port:= 21;
  IdFTP1.Host:= '192.168.1.185';

  try
    // Conectar
    IdFTP1.Connect;
    // Cambiar el directorio activo de subida
    idFTP1.ChangeDir('tmp');
    // crear el Stream
    s := TMemoryStream.Create;
    try
      // Volcar del TImage a un Stream
      Image1.Picture.Bitmap.SaveToStream(s);
      // Subirlo al FTP
      IdFTP1.Put(s, 'image1.jpg', false);
      showmessage('Listo');
      IdFTP1.Disconnect;
    finally
      FreeAndNil(s);
    end;
  except
    showmessage('Negativo');
 end;
end;

esublim 14-02-2023 17:55:03

muchas gracias, rsuelto


La franja horaria es GMT +2. Ahora son las 13:11:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi