Einzelnen Beitrag anzeigen

gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Datei-Download per webview2/TEdgeBrowser

  Alt 16. Mär 2022, 15:42
Delphi-Version: 10.4 Sydney
Hallo,
in einem Projekt prüfen wir ob ein Wechsel von cef3 auf Edge möglich wäre.
Da die Anwendung auch Dateien herunterladen und gezielt ablegen können soll, suche ich nach einem Weg das zu tun.

Hier mal mein versuchter Weg das über WebResourceRequested umzusetzen:

Code:
procedure Tdownload.EdgeBrowser1WebResourceRequested(Sender: TCustomEdgeBrowser; Args: TWebResourceRequestedEventArgs);
var request: ICoreWebView2WebResourceRequest;
    requestURI, responseHeaders, method: PWideChar;
    response: ICoreWebView2WebResourceResponse;
    requestFilename, localFilename, payload: string;
    headers: ICoreWebView2HttpRequestHeaders;
    requestStringStream, : IStream;
    core:ICoreWebView2;
    sett:ICoreWebView2Settings;
begin
  Args.ArgsInterface.Get_Request(request);
  request.Get_uri(requestURI); //kann man sich anschauen wenn man will :)

  //Teile dem Server ein paar Infos über mich mit
  request.Get_Headers(headers);
  headers.SetHeader('User-Agent', PChar('TestBrowserDownload v' + GetVersion));
  headers.SetHeader('Content-Type', PChar('application/x-www-form-urlencoded'));
  request.Set_Method('POST');
  payload := 'a=textusw';
  requestStringStream := TStreamAdapter.Create(TStringStream.Create(payload, TEncoding.UTF8), soOwned);
  request.Set_Content(requestStringStream);
 
  //Versuch IStream für den Dateitransfer zur Verfügung zu stellen...
  Args.ArgsInterface.Get_Response(response);
  requestFileStream := TStreamAdapter.Create(TFileStream.Create(extractfilepath(paramstr(0)) + 'test.dat', fmCreate or fmOpenReadWrite or fmShareDenyNone), soOwned);
  response.Set_Content(requestFileStream);
end;
Er kann die Datei zwar anlegen, danach kommt aber eine Zugriffsverletzung auf 0x00000000. Meine Vermutung ist, dass IStream zum Zeitpunkt des hineinschreibens bereits freigegeben worden ist.
Was mache ich hier falsch?

Alternativ gibt es laut Microsoft-Doku (https://docs.microsoft.com/en-us/dot...et-1.0.1150.38) wohl ein "DownloadStarting" Event, mit dem ich das auch machen könnte. Das ist leider aber nicht in der WebView2.pas gekapselt worden (ich kenne also das Interface nicht und kann auch mit Interfaces noch nicht so richtig).

Viele Grüße

Geändert von gabneo (16. Mär 2022 um 16:07 Uhr)
  Mit Zitat antworten Zitat