Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WebDav - NextCloud (https://www.delphipraxis.net/209847-webdav-nextcloud.html)

Pfaffe 31. Jan 2022 06:49

WebDav - NextCloud
 
Habe mir per GetIt IPWorks 2020 installiert. Und per https://try.nextcloud.com/ einen NextCloud Testzugang eingerichtet. Dann per Demo webdav_11_Alexandria von IPWorks ein paar Tests gemacht. Mit der Komponente TipwWebDav kann per ListDirectory(url) ein Ordner abgefragt werden. Die Ergebnisse werden in einem Ereignis OnDirList geliefert. Dieses Ereignis liefert ResourceURI, DisplayName, ContentLanguage, ContentLength, ContentType und LastModified. Nun fällt auf, dass sämtliche Einträge eines Ordners zweimal in OnDirList geliefert werden und zwar einmal nur mit ResourceURI und dann nochmal mit weiteren Werten, allerdings wird nie ein DisplayName geliefert.
Hat Jemand auch per IPWorks, WebDav und NextCloud Tests durchgeführt? Welche Erfahrungen wurden gemacht?
Hat Jemand eine Alternative um per WebDav Daten von einer NextCloud abzufragen?

Carsten Hölscher 31. Jan 2022 10:27

AW: WebDav - NextCloud
 
Ich nehme die bei Delphi mitgelieferte Indy-Komponente TidWebDAV.

Die tut alles was sie soll mit Nextcloud.

Carsten

Pfaffe 31. Jan 2022 18:27

AW: WebDav - NextCloud
 
Mit TidWebDAV bekomme ich nicht mal ein Login hin, auch nicht mit den Hilfen hier im Forum oder was man so mit googeln so findet.
Falls Du für mich ein Beispiel hättest, wäre dies Supper.
Trotz allem, wäre es für mich von Interesse, ob Jemand IPWorks einsetzt.

Sinspin 1. Feb 2022 07:22

AW: WebDav - NextCloud
 
Hallo, ich verwende verschiedene Komponenten von /Nsoftware seit vielen Jahren. Die haben zwar ein merkwürdiges Design, aber hat man das begriffen sind es die stabilsten Komponenten die ich bisher verwendet habe.

WebDav habe ich bisher nie ausprobiert, da aber alle Komponenten gleich aufgebaut sind, sind die aber gleich zu debuggen.
Für den Anfang, implementiere alle Ereignishandler und schreibe alle Ereignisse in einen Log.
Schau dir an was der Befehl Config für Aufgaben hat. Es sind manchmal komisch Einstellungen zu machen.

Hold dir eine Trial von FileZilla Pro, die kann auch WebDav. Damit kannst Du testen ob dort alles klappt wie es soll.

Carsten Hölscher 1. Feb 2022 16:55

AW: WebDav - NextCloud
 
Wichtig ist ein aktuelles Indy gewesen. Das musste ich erstmal aktualisieren.
Und dann muss natürlich die Verschlüsselung zum System passen. Ich kann mal ein paar Code-Schnipsel raussuchen.

Carsten

Carsten Hölscher 3. Feb 2022 18:01

AW: WebDav - NextCloud
 
Hier mal der Inhalt der dfm-Datei und 2 Beispiele wie ich eine Datei und eine Auflsitung des Serverinhalts mache:

Code:
  object IdConnectionIntercept: TIdConnectionIntercept
    Left = 512
    Top = 64
  end

  object IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL
    Intercept = IdConnectionIntercept
    MaxLineAction = maException
    Port = 0
    DefaultPort = 0
    SSLOptions.Method = sslvTLSv1_2
    SSLOptions.SSLVersions = [sslvTLSv1_2]
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    Left = 456
    Top = 48
  end

  object IdWebDAV: TIdWebDAV
    Intercept = IdConnectionIntercept
    IOHandler = IdSSLIOHandlerSocketOpenSSL
    OnWork = IdWebDAVWork
    OnWorkBegin = IdWebDAVWorkBegin
    OnWorkEnd = IdWebDAVWorkEnd
    HandleRedirects = True
    ProxyParams.BasicAuthentication = False
    ProxyParams.ProxyPort = 0
    Request.CacheControl = 'no-cache'
    Request.Connection = 'Keep-Alive'
    Request.ContentEncoding = 'utf-8'
    Request.ContentLength = -1
    Request.ContentRangeEnd = -1
    Request.ContentRangeStart = -1
    Request.ContentRangeInstanceLength = -1
    Request.Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    Request.AcceptCharSet = 'utf-8'
    Request.BasicAuthentication = True
    Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
    Request.Ranges.Units = 'bytes'
    Request.Ranges = <>
    HTTPOptions = [hoForceEncodeParams]
    Left = 400
    Top = 32
  end
 
 
  // datei öffnen
  stream:=TMemoryStream.Create;
  ss:=TStringList.Create;

  IdWebDAV.Request.URL:=....;
  IdWebDAV.Request.Username:=....;
  IdWebDAV.Request.Password:=....;
  IdWebDAV.Request.CustomHeaders.Clear;
 
  try
    IdWebDAV.Get(<URL der Datei>, stream);
    stream.Position:=0;
    ss.LoadFromStream(stream);
  except
    on E:Exception do MessageDlg(E.Message + ' ('+<URL der Datei>+')', mtWarning, [mbOK], 0);
  end;
  ss.Free;
  stream.Free;
 
  // dateiverzeichnis abfragen
  WebDAVXml:IXMLDocument ;
  xmlResponse:=TMemoryStream.Create;
  IdWebDAV.DAVPropFind(Serverpfad, nil, xmlResponse, '4', 1, 4); // Die '1' lädt das aktuelle Verzeichnis, die Tiefe kann hier bestimmt werden
  WebDAVXml:=TXmlDocument.Create(nil);
  try
    WebDAVXml.LoadFromStream(xmlResponse);
   ... xml analysieren
  except
    .... //xml-Fehler
  end;  
  xmlResponse.free;

Pfaffe 4. Feb 2022 12:05

AW: WebDav - NextCloud
 
Danke Carsten, hat sofort funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 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