AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Delphi Indy Datei via URL downloaden und temporär öffnen?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von CG2003 · begonnen am 6. Jun 2019 · letzter Beitrag vom 3. Jul 2019
Antwort Antwort
Seite 2 von 4     12 34      
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#11

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

  Alt 7. Jun 2019, 11:34
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.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#12

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

  Alt 7. Jun 2019, 11:56
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#13

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

  Alt 7. Jun 2019, 11:57
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.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#14

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

  Alt 7. Jun 2019, 12:04
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.
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#15

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

  Alt 17. Jun 2019, 17:37
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?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#16

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

  Alt 17. Jun 2019, 18:01
Hallo,
Zitat:
so lange sie geöffnet ist
danach DeleteFile benutzen, oder habe ich das was ganz falsch verstanden?
Heiko
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#17

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

  Alt 17. Jun 2019, 18:11
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.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

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

  Alt 17. Jun 2019, 19:11
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#19

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

  Alt 17. Jun 2019, 20:27
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?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

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

  Alt 17. Jun 2019, 20:30
Du bekommst ein Dateihandle zurück. Eventuell kannst du den an den Stream übergeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 03:37 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