Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Delphi Indy Datei via URL downloaden und temporär öffnen? (https://www.delphipraxis.net/200914-delphi-indy-datei-via-url-downloaden-und-temporaer-oeffnen.html)

CG2003 7. Jun 2019 10:34

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Hallo zusammen,

ich habe gerade mal nachgeschaut, ich bekomme immer text/html, egal welcher Dateityp dahinter steckt.
In meinem Header den ich oben gespostet habe, hatte ich versucht eine PDF Datei herunterzuladen.
Im Browser funktioniert alles einwandfrei, da kann ich eine Datei problemlos runterladen und sie wird auch mit korrektem Namen und Endung gespeichert.

Alles schon sehr merkwürdig.

Delphi.Narium 7. Jun 2019 10:56

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Um welche Dateitypen handelt es sich, kannst Du das einschränken auf z. B. nur HTML, PDF ... oder musst Du mit "kann alles sein, was es so gibt" rechnen?

Ist es eingeschränkt auf bestimmte Typen, kannst Du das selbst auswerten.

Du hast nach dem Get per Indy ja 'nen Stream.

Die ersten 4 Byte einer PDF sind immer "%PDF", das kann man einfach abfragen.

HTML beginnt mit <html, xml mit <xml ...

Es kommt also auf die "Menge der möglichen Dateitypen" an, ob es nicht einfacher ist das "eben mal" selbst zu prüfen.

Der FireFox hat 'ne Webkonsole, in der kann man sich die Headerdaten übersichtlich anschauen, kannst Du den bei Dir auch verwenden? Notfalls halt die Url, die Du Indy beim Get übergibst, mal per Copy&Paste dem Browser spendieren und den mal die Headerdaten anzeigen lassen.

Bei anderen Browsern müsstest Du mal schauen, ob sie 'ne ähnliche Option bieten.

Ansonsten:

https://elmar-eigner.de/_freetools/h...r-auslesen.php
https://www.gaijin.at/de/tools/webserver-spy

Schau bitte mal nach, welche Webseite den Mime-Type nicht in Content-Type liefert.

Literatur zur Definiton dessen, was im Header wie zu stehen hat: https://www.w3.org/Protocols/rfc2616....html#sec14.17

mjustin 7. Jun 2019 10:57

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Zitat:

Zitat von CG2003 (Beitrag 1434128)
ich habe gerade mal nachgeschaut, ich bekomme immer text/html, egal welcher Dateityp dahinter steckt.
In meinem Header den ich oben gespostet habe, hatte ich versucht eine PDF Datei herunterzuladen.
Im Browser funktioniert alles einwandfrei, da kann ich eine Datei problemlos runterladen und sie wird auch mit korrektem Namen und Endung gespeichert.

Ist JavaScript im Spiel? Testweise muss man dazu die URL im Browser nicht anklicken, sondern sie in einem neuen Fenster (oder sogar einem anderen Browser) direkt im Adressfeld eingeben. So kann man den GET Request einfach testen, ob er dann immer noch funktioniert.

Wenn es dann auch funkioniert, tippe ich stark auf ein Problem mit dem Indy Request. Das zu untersuchen ist aber auch möglich. Man muss dazu den HTTP Traffic des Browsers aufzeichnen. Über F12 (Entwicklermodus) kann man loggen, was im Detail an den CMS Server gesendet wird, und welcher MIME-Typ im Response Header zurückkommt. Hat man den funktionierenden Request, muss man diesen mit Indy nachbauen.

Wie sieht der Indy Request im HTTP Header aus? Eventuell fällt dort etwas auf.

Delphi.Narium 7. Jun 2019 11:04

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Was auch noch sein könnte, dass im Browser zuerst 'ne HTML-Seite angefordert wird und dann per HTTP-Code 302 (o. ä.) eine Weiterleitung zur PDF erfolgt, die dann mit 'nem passenden Content-Type geliefert wird.

Wie ist die Indykomponete konfiguriert? Folgt sie Redirects? Wenn nein, das mal bitte ändern.

CG2003 17. Jun 2019 16:37

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Hallo zusammen,

danke für Eure Denkanstöße. Problem gelöst. Es lag an einer fehlerhaften Apache Konfiguration.

Eine Frage habe ich noch offen. Wenn ich jetzt mittels Indy Response Stream eine Datei herunterlade, kann ich diese irgendwie "nur" temporär herunterlacen, also nur solange auf der Platte belassen so lange sie geöffnet ist?
Evtl. beim Download und Speichern der Datei ein Windows-Flag "zu löschen" oder ähnliches zu setzen?

hoika 17. Jun 2019 17:01

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Hallo,
Zitat:

so lange sie geöffnet ist
danach DeleteFile benutzen, oder habe ich das was ganz falsch verstanden?

CG2003 17. Jun 2019 17:11

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Das geht aber nur in einem Loop solange meine Applikation läuft.
Ich würde gern die Datei zum Löschen markieren so dass - sie sobald sie nicht mehr geöffnet ist - gelöscht wird.

Luckie 17. Jun 2019 18:11

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Wie wäre es mit CreateFile und dem Flat FILE_FLAG_DELETE_ON_CLOSE?

Zitat:

The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles.

If there are existing open handles to a file, the call fails unless they were all opened with the FILE_SHARE_DELETE share mode.

Subsequent open requests for the file fail, unless the FILE_SHARE_DELETE share mode is specified.

CG2003 17. Jun 2019 19:27

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Hallo Michael,

das klingt an sich nicht schlecht aber...

ich erstelle momentan die Datei aus einem Stream:

Code:
procedure TfrmSearch.lvSearchDblClick(Sender: TObject);
begin
   Stream := TMemoryStream.Create;
    try
      IdHTTP.HandleRedirects := True;
        IdHTTP.Get(Host + '/restapi/index.php/document/' + String(lvSearch.Items.Item[i].Data) + '/content', Stream);
        Stream.SaveToFile(GetSpecialFolder(CSIDL_APPDATA) + '\' + ResponseFileName);
    except
      on E:Exception do begin
          ShowMessage('Fehler: ' + E.Message);
        end;
    end;
    Stream.Free;
end;
CreateFile jedoch erstellt die Datei ja auch und ich kann da ja nur einen Dateinamen übergeben, jedoch keinen Stream oder habe ich was übersehen?

Luckie 17. Jun 2019 19:30

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
 
Du bekommst ein Dateihandle zurück. Eventuell kannst du den an den Stream übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.
Seite 2 von 4     12 34      

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