AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei-Download per webview2/TEdgeBrowser

Ein Thema von gabneo · begonnen am 16. Mär 2022 · letzter Beitrag vom 17. Mär 2022
Antwort Antwort
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, 16: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 17:07 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Datei-Download per webview2/TEdgeBrowser

  Alt 17. Mär 2022, 07:56
Ich kann nur ganz allgemein empfehlen sich die Rückgabewerte (von z.B. put_content) anzusehen, nicht dass dem schon etwas nicht schmeckt.

Und ganz dumme Idee: Nicht dass response einfach nur nil war?
  Mit Zitat antworten Zitat
gabneo

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

AW: Datei-Download per webview2/TEdgeBrowser

  Alt 17. Mär 2022, 09:51
Das werde ich bei nächster Gelegenheit überprüfen. Danke schon mal für die Ideen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz