Einzelnen Beitrag anzeigen

Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

Probleme mit HTTP.Get

  Alt 29. Nov 2017, 13:43
Hallo ich veruche Images mit Chromium down zu loaden wie in dem Post beschrieben
https://stackoverflow.com/questions/...-image-to-file
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, IdHTTP, cefvcl, ceflib;

const
  MENU_ID_SAVE_IMAGE_AS = Ord(MENU_ID_USER_FIRST) + 1;

type
  TDownloader = class(TThread)
  private
    FURL: string;
    FFileName: string;
  protected
    procedure Execute; override;
  public
    constructor Create(const URL, FileName: string); reintroduce;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Chromium1: TChromium;
    SavePictureDialog1: TSavePictureDialog;
    procedure FormCreate(Sender: TObject);
    procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
      const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
    procedure Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser;
      const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer;
      eventFlags: TCefEventFlags; out Result: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TDownloader }

constructor TDownloader.Create(const URL, FileName: string);
begin
  inherited Create(False);
  FreeOnTerminate := True;
  FURL := URL;
  FFileName := FileName;
end;

procedure TDownloader.Execute;
var
  HTTPClient: TIdHTTP;
  FileStream: TFileStream;
begin
  try
    HTTPClient := TIdHTTP.Create;
    try
      FileStream := TFileStream.Create(FFileName, fmCreate);
      try
        HTTPClient.Get(FURL, FileStream);
      finally
        FileStream.Free;
      end;
    finally
      HTTPClient.Free;
    end;
  except
    // error handling ignored for this example
  end;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chromium1.Load('http://www.google.com/');
end;

procedure TForm1.Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
begin
  if (CM_TYPEFLAG_MEDIA in params.TypeFlags) and (params.MediaType = CM_MEDIATYPE_IMAGE) then
    model.AddItem(MENU_ID_SAVE_IMAGE_AS, 'Save image as...');
end;

procedure TForm1.Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer;
  eventFlags: TCefEventFlags; out Result: Boolean);
var
  SaveDialog: TSavePictureDialog;
begin
  if (commandId = MENU_ID_SAVE_IMAGE_AS) then
  begin
    SaveDialog := TSavePictureDialog.Create(nil);
    try
      // SaveDialog.FileName := <here you can extract file name from params.SourceUrl>;
      // SaveDialog.DefaultExt := <here you can extract file ext from params.SourceUrl>;
      if SaveDialog.Execute then
        TDownloader.Create(params.SourceUrl, SaveDialog.FileName);
    finally
      SaveDialog.Free;
    end;
  end;
end;
end.

Nur bei den meißten Bilder bekomme ich Schutzverletzungen
Delphi-Quellcode:
 
 HTTPClient.Get(FURL, FileStream);
Mit einem normalen Browser kann ich ohne Probleme das entsprechende Image
speichern. Das Bild, der Link ist also in Ordnung.
Hat dazu jemand eine Idee
Martin MIchael
  Mit Zitat antworten Zitat