Hoe u uw WebDAV-server instelt voor externe bestandstoegang. Installeren en configureren van WebDAV op IIS op Windows

Als u verbonden bent betaald tarief, kunt u verbinding maken met de dienst via WebDAV-protocol. Op uw computer ziet de Cloud eruit als een normaal bestandssysteem.

Instellen op Windows

1. Ga naar Deze pc.

2. B bovenste paneel klik op "Verbinden" netwerk schijf».

3. Klik in het geopende venster op het opschrift "Verbinden met een website waar u documenten en afbeeldingen kunt opslaan."

5. Markeer “Selecteer andere netwerk locatie" en klik op "Volgende".

6. In het veld " Netwerk adres of internetadres" invoeren https://webdav.cloud.mail.ru en klik op “Volgende”.

7. Voer de login en het wachtwoord in voor het account waarmee de Cloud is verbonden.

8. Geef de naam van het netwerkstation op en klik op “Volgende”.

9. Klik op "Gereed". De netwerkschijf zal beschikbaar zijn in Explorer.

Bij het laden grote bestanden Er is een probleem met de indicator: deze stopt bij 99%. In feite begint het downloaden op dit moment. Wacht nog enige tijd totdat het bestand in de cloud verschijnt. Dit is een specifiek kenmerk van het WebDAV-protocol op Windows. Helaas kunnen wij er geen invloed op uitoefenen.

Bugfixes

Als er een fout optreedt bij het verbinden met de cloud via het WebDAV-protocol, probeer dan de toegang in te stellen via Windows-console. Om dit te doen:

  1. Druk op de Win+R-toetsen.
  2. In het geopende venster typt u “CMD” en klikt u op “OK”. Er wordt een opdrachtprompt geopend.
  3. Voer het net use R-commando in: https://webdav.cloud.mail.ru/ /gebruiker: /persistent:ja waar — uw mailbox waarmee de Cloud is verbonden, en - het wachtwoord ervoor.

Als de fout zich blijft voordoen, controleer dan of uw Web Client-service actief is. Om dit te doen:

  1. Ga naar Start → Configuratiescherm → Systeem en beveiliging → Systeembeheer → Services.
  2. Zoek de dienst "Web Client" in de lijst en open deze.
  3. Selecteer Automatisch in de lijst Opstarttype.
  4. Klik op OK en start uw computer opnieuw op.

Installatie op macOS

1. Klik op het bureaublad in de Finder-taakbalk op Ga → Verbinden met server.

2. Voer https://webdav.cloud.mail.ru in en klik op “Verbinden”.

3. Voer de login en het wachtwoord in voor het account waarmee de Cloud is verbonden en klik op “Verbinden”.

Er wordt een venster met de gebruikerscloud geopend.

Installatie op Linux

1. Ga naar jouw bestandsbeheerder.

2. Klik op “Verbinden met server”.

3. Voer in het veld “Serveradres” in davs://<логин>@webdav.cloud.mail.ru:443, Waar<логин>— het adres van uw mailbox waarmee de Cloud is verbonden, in het formaat [e-mailadres beveiligd].


4. Klik op “Verbinden”.

5. Voer het wachtwoord voor de mailbox in en klik nogmaals op “Verbinden”.

De wolk gaat open. Om er later toegang toe te krijgen, opent u Bestandsbeheer. De link vindt u onderaan in het linkermenu.

Om de Cloud te verlaten, klikt u op het pictogram naast de naam.

Als u davfs2 gebruikt, schakel dan het gebruik van de LOCK-methode uit. Om dit te doen, stelt u de use_locks-opties in op 0 inch configuratiebestand/etc/davfs2/davfs2.conf (bestandslocatie kan variëren, afhankelijk van de gebruikte distributie).

Als ik bij wijze van inleiding de voordelen van dataopslag in de cloud zou gaan beschrijven, zou je denken dat ik net ontdooid was na twintig jaar opgeschorte animatie of dat ik ernstig misbruik maakte van slaappillen :). Daarom zal ik kort zeggen, in termen van programmeurs: toen ik werd geconfronteerd met de taak om een ​​programma te maken dat kon werken met bestanden op meerdere opslagplaatsen zonder gebonden te zijn aan de API van een specifieke dienst (we hadden het over back-up), bleek het dat het niet zo eenvoudig was. Ik besloot je in dit artikel te vertellen over alle subtiliteiten en valkuilen van het werk.

WebDAV

WebDAV (Web Distributed Authoring and Versioning) is een protocol voor het overbrengen en werken met gegevens, gebouwd bovenop HTTP 1.1. Hierbij moet worden opgemerkt dat de overdracht zowel beveiligd als onbeveiligd kan zijn. Er zit geen beveiliging in het protocol zelf, maar deze kan worden toegevoegd door de implementatie van authenticatie op de webserver en encryptie via SSL. Daarom zal in dit geval HTTPS worden gebruikt in plaats van HTTP.

DAV is oorspronkelijk ontwikkeld voor co-creatie en het bewerken van webpagina's, maar tijdens het gebruik heeft het toepassing gevonden als een netwerkgedistribueerd bestandssysteem, effectief voor het werken in een omgeving met hoge belasting en ter ondersteuning van onstabiele verbindingen. DAV is dus geschikt voor het beheren van bestanden op webservers, met andere woorden, het implementeren van cloudinformatieopslag, waar het werd gebruikt. Met zijn hulp kunt u basisbewerkingen uitvoeren op bestanden op de server en geavanceerde bewerkingen uitvoeren, zoals: blokkeren, verkrijgen van metadata, versiebeheer en andere. Dit protocol werd een vervanging voor de goede oude FTP, waarvan de tijd ten einde is.

WebDAV biedt zeven opdrachten:

  • PROPFIND - de eigenschappen van een object op de server ophalen XML-formaat;
  • PROPPATCH - objecteigenschappen wijzigen;
  • MKCOL - maak een map op de server;
  • KOPIËREN - kopiëren aan de serverzijde;
  • MOVE - bewegen aan de serverzijde;
  • VERGRENDELEN - een object vergrendelen;
  • UNLOCK - verwijder de vergrendeling van een object.

Met WebDAV kunt u dus de eigenschappen wijzigen van objecten die op de server zijn opgeslagen, een zoekopdracht uitvoeren op basis van eigenschappen, een object vergrendelen (in ons geval een bestand) zodat slechts één gebruiker het kan bewerken in een gedistribueerde omgeving waarin veel gebruikers kan toegang krijgen, bestandsversies beheren (via oudere check-in, -out-opdrachten) en geavanceerde, op lijsten gebaseerde bestandstoegangscontrole uitvoeren.

Bovendien ondersteunt WebDAV oudere opdrachten: GET - om een ​​bestand te downloaden, PUT - om naar de server te uploaden, en DELETE - om een ​​object te verwijderen. We zullen niet naar alle commando's kijken; in mijn geval had ik er slechts vier nodig om de functionaliteit van het hulpprogramma te implementeren.

Momenteel zijn Microsoft, Mozilla, Novell, IBM en anderen betrokken bij de ontwikkeling van het protocol. Daarom moet het u niet verbazen dat in veel gevallen WebDAV-ondersteuning aanwezig is Microsoft-producten(inbegrepen Internet Explorer, dirigent, IIS-webserver en anderen), Mozilla-browser Firefox, Novell, IBM-producten. Bovendien kunt u door plug-ins te installeren “vrienden maken” met het protocol Totaal commandant en VER.

Zoals al vermeld, in Windows-afstandsbediening WebDAV-opslag kan worden aangesloten op Explorer als extra schijf. Insgelijks U kunt dit in OS X doen door een verbinding met een WebDAV-server in te stellen als extra map in de Finder.

Mogelijke oplossingen

Ik stond voor de taak om werk te verbinden en te organiseren met gegevens over twee bestandsopslag: Yandex.Disk en Dropbox. Beide services ondersteunen het WebDAV-protocol. Door e-mail te registreren op Yandex krijgt u automatisch toegang tot 10 GB aan cloudopslag, waarmee u niet alleen verbinding kunt maken via een standaardclient, maar ook via een tool van derden (bijvoorbeeld uw eigen programma) via het WebDAV-protocol. Wanneer u zich registreert voor Dropbox, krijgt u 5 GB schijfruimte, die kan worden gebruikt via een standaardclient. Om toegang te krijgen tot de opslag via WebDAV moet u echter een aanvullende registratie ondergaan. Als gevolg hiervan bleek deze toegang niet gratis, maar na registratie wordt er twee weken gratis toegang gegeven. De opslaggroottes kunnen worden vergroot: hetzij door een extra betaling, hetzij door deel te nemen aan verschillende promoties van services, bijvoorbeeld door bugs te vinden en deze aan ontwikkelaars te rapporteren.

Toen ik een programma moest schrijven om met het WebDAV-protocol te werken, keek ik eerst naar de Win32 API om te zien of hier functies voor waren, vergelijkbaar met de functies die beschikbaar zijn voor het werken met FTP. Vooruitkijkend zal ik merken dat ik een krappe deadline had, dus het was niet mijn bedoeling om functies op API-niveau te gebruiken. Zoals je zou verwachten, begint in de Win32 API met de versie voor Windows Vista, inclusief WebDAV-API. Het omvat één opsomming, drie structuren en een reeks functies. Ik dacht van wel goed teken, omdat er zeker oplossingen op een hoger niveau zijn gebaseerd op de standaard API en ik niet bij de API-functies hoef te blijven hangen.

Toen kwam Delphi XE3 bij de hand en ik besloot te kijken welke tools het had om met het WebDAV-protocol te werken. Het bleek dat het (op het tabblad Indy Clients van het componentenpalet) de component IdWebDav bevat. Ik dacht al dat dit het einde van het onderzoek was... Maar het bleek dat dit onderdeel op geen enkele manier verbinding maakt met Yandex (Yandex.Disk had voor mij een service met hogere prioriteit, dus ik heb voornamelijk alle tests uitgevoerd op Het).

Toen besloot ik het oude, maar beproefde, te gebruiken netwerk bibliotheek Synaps voor Delphi. Daarnaast is er een uitstekende site op RuNet met verschillende artikelen gewijd aan deze bibliotheek, www.webdelphi.ru. In eerste instantie verliep het werk goed en kon ik verschillende functies van het protocol implementeren: een map maken, bestanden downloaden, objecteigenschappen verkrijgen. Maar het meest belangrijkste functie- het uploaden van bestanden naar de server vanaf een lokale computer is nooit geïmplementeerd. Het werd triest: er is geen zinnige informatie over dit protocol op internet. Bing vond verschillende betaalde sets componenten voor het werken met het netwerk, waarvan ik er één uit nieuwsgierigheid besloot te gebruiken om erachter te komen of het mogelijk was een bestand naar Yandex.Disk te uploaden. Deze bleek Clever Internet Suite te zijn. Nadat we een component van de klasse clWebDav hadden gemaakt, zijn we erin geslaagd een bestand met één regel code naar de server te uploaden:

waarbij stream een ​​bestandsstream is die eerder is gemaakt om te lezen.

Geweldig, maar de kosten van dit product zijn onaangenaam: meer dan $ 500. dat wil zeggen, wat is niet goed. Als je deze methode wilt gebruiken, let dan op de versie van de bibliotheek: je kunt alleen verbinding maken met Yandex met versie 7.0 en hoger; als je versie 6.0 gebruikt, die wijdverspreid is op internet, dan is het uploaden van gegevens naar de server mogelijk niet mogelijk zijn. Ik werd het spelen met Delphi beu en besloot me tot dotNET en C# te wenden.

Maak verbinding met Yandex.disk + maak een verzameling

Omdat WebDAV bovenop HTTP/S draait, heb ik besloten om de klassen HttpWebRequest en HttpWebResponse te gebruiken, die sinds versie 2.0 in het .NET Framework zijn opgenomen. In dit geval gebruiken we .NET Framework 4.0. Hieronder vertel ik je waarom. Kortom, de eerste van de vermelde klassen vertegenwoordigt een HTTP-verzoek, de tweede vertegenwoordigt een HTTP-antwoord. Onze taak is om het verzoek correct te formuleren, zodat de WebDAV-server het kan begrijpen. Raadpleeg de Yandex-documentatie over het gebruik van het WebDAV-protocol voor meer informatie over het correct formuleren van verzoeken aan de WebDAV-server.

Volgende actie laten we een klein programma schrijven dat vier bewerkingen kan uitvoeren: maak een map aan externe gastheer, object laden, object downloaden en object verwijderen. Deze bewerkingen zijn voldoende voor de meeste toepassingen die oplossen productie taken. Laten we voor de eenvoud een WinForms-toepassing maken. In een paar woorden vertel ik je over mijn programma. Het is een consoletoepassing die volgens een schema wordt gestart door een batchbestand. De belangrijkste actie is het uploaden van bestanden naar een externe host, terwijl de taken ervan bestaan ​​uit het correct verwerken van het masker voor het selecteren van bestanden, evenals het verwerken van de paden waarop ze zich bevinden, plus juiste creatie in de cloud, een mappenhiërarchie die vergelijkbaar is met die waarop wordt gehost lokale schijf. Bovendien, aangezien het programma binnenkomt automatische modus, er wordt een logbestand gemaakt. In onze het programma van vandaag We slaan deze stappen over (uiteraard buiten het onderwerp) en concentreren ons op het WebDAV-protocol.

Let op: bij het maken van een projectsjabloon kunt u beter .NET Framework 4.0 als basis gebruiken. En hoewel ondersteuning voor WebDAV in de tweede versie verscheen, toonden tests aan dat hetzelfde programma, opnieuw gecompileerd met .NET 4, twee keer zo snel werkt, en dit betreft de snelheid van het werken met bestanden en het verzenden ervan.

Nadat u de aanvraagsjabloon hebt gemaakt, plaatst u vier knoppen op het formulier. De eerste handeling die we zullen implementeren is het maken van een map (of verzameling). Zij is de eenvoudigste van allemaal. Opmerking: hoewel Yandex.Disk werkt met het beveiligde HTTPS-protocol, kan de map worden gemaakt met behulp van HTTP. We hebben ook vier invoervelden op het formulier nodig: om het adres van de externe host op te geven (voor nu richten we ons op Yandex.Disk: https://webdav.yandex.ru/), om de gebruikersnaam en het wachtwoord in te voeren (voor authenticatie op Yandex) en om de mapnaam in te voeren, die we in de cloud willen maken (Fig. 1). Let op: het serveradres moet samen met het protocol worden ingevoerd in in dit geval https://.

Neem allereerst naamruimten op in uw code: gebruik System.Net; - voor het werken met het netwerk en het gebruik van System.IO; - Voor bestand-I/O. Maak vervolgens een handler voor de klikgebeurtenis op de knop CreateDir. Schrijf daarin de volgende code:

Tekenreeksmap = mapEdit.Text;

String-URL = urlEdit.Text; String gebruikersnaam = naamEdit.Text; Tekenreekswachtwoord = wachtwoordEdit.Text; url += map; url = url.TrimEnd(); HttpWebRequest-verzoek = HttpWebRequest.Create (url) als HttpWebRequest; request.Credentials = new NetworkCredential(gebruikersnaam, wachtwoord);

Het WebDAV-protocol staat het aanmaken van meerdere submappen in één verzoek niet toe, bijvoorbeeld /map1/map2/; U kunt slechts één map aanmaken: /folder1/. Als de map bestaat en het verzonden verzoek probeert een map met dezelfde naam aan te maken, genereert de server een uitzondering die moet worden opgevangen met een try/catch-constructie. Het bovenstaande voorbeeld verwerkt geen uitzonderingen, dus als u deze code in uw toepassing gebruikt, vergeet deze dan niet toe te voegen. Als u wilt weten of een map al dan niet bestaat, kunt u het PROPFIND-verzoek gebruiken en vervolgens het serverantwoord ontvangen en parseren met informatie in XML-formaat over de objecten die beschikbaar zijn op de server. Maar dit zal lang duren, en naar mijn mening is het beter om het MKCOL-verzoek te gebruiken en, als er een map met dezelfde naam aanwezig is, de uitzondering af te handelen. Dus in zijn consolehulpprogramma Ik maak een mappenhiërarchie. Als er bovendien al een map met dezelfde naam bestaat, wordt deze ingevoerd.

Een object verwijderen

Het verwijderen van een bestand en/of map met behulp van het WebDAV-protocol is net zo eenvoudig als het maken van een verzameling. Om deze taak te implementeren, gebruikt u de bovenstaande code, waarin u de regel die de door de server uitgevoerde methode specificeert, moet vervangen door het volgende:

Request.Method = "VERWIJDEREN";

Zoals u kunt zien, heeft de klasse WebRequestMethods.Http geen Delete-methode, maar we kunnen de gewenste methode opgeven als een tekenreeks. Het wordt naar de server gestuurd, het belangrijkste is dat deze deze methode kan verwerken en uitvoeren, en de WebDAV-server is, zoals we weten, daartoe in staat.

In dit geval is het ook beter om de try/catch-constructie te gebruiken om de uitzondering op te vangen die kan optreden als gevolg van de afwezigheid van het te verwijderen object.

Een bestand downloaden

Om een ​​bestand uit een cloudopslag te downloaden met behulp van het WebDAV-protocol, hoeft u niet veel met de bestaande code te manipuleren. Maar upload eerst een bestand naar de cloud standaard middelen(via de webinterface of desktop Yandex-client). Volgens het plan zullen we bij het downloaden van een bestand in het vierde (onderste) invoerveld de naam invoeren van het bestand dat we willen downloaden. We zullen dezelfde naam toewijzen aan het resultaatbestand op lokale computer. Houd er rekening mee dat we op de server /Software/file.txt kunnen specificeren en toegang krijgen tot het bestand in de map Software. De map wordt echter niet automatisch aangemaakt in het lokale bestandssysteem en moet dus eerst worden aangemaakt. Kortom, we zullen het bestand ZuneSetupPkg.exe downloaden (een onmisbare tool om mee te werken Windows Phone, die ik vaak opnieuw moet installeren op de computers van anderen, zodat ik het altijd bij de hand heb - in de cloud) vanuit de root van Yandex.Disk naar de map met het uitvoerbare bestand.

In de handler voor het klikken op de knop Downloaden, na het initialiseren van de variabelen, het maken van een verzoekobject en het instellen van Credentials, stelt u het methodetype in: GET (zie de bron in de materialen voor het nummer). Nadat we het serverantwoord hebben ontvangen (een HttpWebResponse-klasseobject), declareren we variabelen voor het lezen van gegevens:

Int byteTransferRate = 8192; // Buffergrootte byte bytes = nieuwe byte // Buffer int bytesRead = 0;

lang totaalBytesRead = 0;

lange contentLength = long.Parse(response.GetResponseHeader("Content-Length"));

In de laatste coderegel lezen we de bestandsgrootte uit de responsheader van de server en slaan deze op in een variabele. Vervolgens maken we een bestandsstroom om een ​​bestand naar schijf te schrijven:

FileStream fs = nieuwe FileStream(fileToDownload, FileMode.Create, FileAccess.Write);

Vervolgens ontvangen we de stream van de server:

Stream s = respons.GetResponseStream();

We lezen er gegevens in gedeelten uit en schrijven deze naar een bestand totdat er iets is om te schrijven:

Do ( bytesRead = s.Read(bytes, 0, bytes.Length); if (bytesRead > 0) ( totalBytesRead += bytesRead; fs.Write(bytes, 0, bytesRead); ) ) while (bytesRead > 0); Nadat alle gegevens naar het bestand zijn geschreven, sluit u beide streams en de serverreactie. Tijdens het lezen van gegevens hebben we de variabele totalBytesRead verhoogd met het aantal gelezen bytes. In dit geval, als er geen fouten zijn, zou de grootte van deze variabele gelijk moeten worden aan de grootte die we uit de header hebben berekend, en als dit zo is, is het bestand correct gedownload en geven we hierover een bericht weer (Fig. 2), maar zijn de maten niet gelijk, dan is er een storing opgetreden, ook hiervan informeren wij de gebruiker. Deze code is niet zonder uitzonderingen die moeten worden opgevangen, waaronder: (404) kan het bestand niet vinden (op de server), kan er niet naar schrijven

opgegeven plaats

en vele anderen.

Een bestand uploaden naar de server De laatste handeling, zonder welke ons hulpprogramma onvolledig zal zijn, is het uploaden van het bestand naar de externe host. Dit is de meest "sluwe" operatie. De hierboven besproken operaties leverden niet de minste problemen op, maar deze bleek cooler! Ik heb al gezegd dat er problemen waren met de implementatie van het laden van bestanden bij het gebruik van andere ontwikkelhulpmiddelen. En niet alles verliep soepel in C#. Eerst zullen we in de documentatie kijken op welk verzoek Yandex wacht om een ​​bestand te uploaden (Fig. 3). het is noodzakelijk om meerdere bestanden tegelijk te downloaden (op verzoek van de gebruiker), bestanden op masker te selecteren, een directoryhiërarchie aan te maken en ten slotte fouten af ​​te handelen. Om geen water in een vijzel te stampen, zullen we dit allemaal achterwege laten en ons concentreren op het laden ervan gegeven bestand, zonder mappen te maken en fouten af ​​te handelen. We laten dit allemaal voor je achter als huiswerk. Dus in het programma dat ik heb voorbereid, wordt de UpdateFile-methode aangeroepen vanuit de knopklikhandler, de hostnaam en de naam van het gedownloade bestand, die uit de overeenkomstige invoervelden zijn gehaald, worden eraan doorgegeven. Het begin van de methode zelf is vergelijkbaar met degene die hierboven zijn besproken, maar nu sturen we in de verzoekheader het PUT-commando dat door de server moet worden uitgevoerd, dat wil zeggen dat we onze wens uiten om het bestand te downloaden. Als we bij het uitvoeren van eerdere verzoeken niet bijzonder op de documentatie vertrouwden, dan zal het deze keer erg nuttig voor ons zijn: we zullen in de verzoekheader alle door Yandex aanbevolen velden opnemen, evenals enkele extra. Laten we dus naar de headercode kijken en vervolgens de problemen bespreken:

Request.ContentLength = bestandslengte;

verzoek.KeepAlive = false; request.ReadWriteTimeout = -1; verzoek.Time-out = -1; request.AllowWriteStreamBuffering = false;. Een waarde van -1 betekent oneindig. De grootte van het gedownloade bestand kan oneindig groot zijn, dus we kunnen niet voorspellen hoeveel tijd het zal duren om het te downloaden. De volgende eigenschap: AllowWriteStreamBuffering is erg interessant, het schakelt het bufferen van gegevens vóór verzending in of uit. Indien ingeschakeld, wordt het verzonden bestand eerst in het geheugen geladen en pas daarna naar de server geüpload. Het vreemde van deze eigenschap is dat je op sommige hosts zonder problemen een bestand kunt uploaden door buffering uit te schakelen, maar op andere hosts verschijnt er een uitzondering over de noodzaak van buffering. Dit kan te wijten zijn aan bepaalde register- of communicatie-instellingen; Ook sluit ik verschillen tussen diensten niet uit. Als buffering is ingeschakeld en naar de server wordt verzonden groot bestand, heeft mogelijk geen bronnen meer (uitzondering SystemOutOfMemory). U kunt een selectievakje aan uw programma toevoegen om buffering in of uit te schakelen. Als buffering is uitgeschakeld, moet de PreAuthenticate-vlag (de volgende eigenschap) worden ingeschakeld, die authenticatiegegevens samen met de header verzendt. Volgende parameter Met SendChunked (alleen voor Yandex.Disk) kun je bestanden van een vooraf bepaalde grootte uploaden naar een externe host, waarop Dropbox met een uitzondering reageert. Vervolgens geven we het type gegevens aan dat wordt overgedragen, de versie van het gebruikte protocol (11 betekent 1.1) en het aantal mogelijke HTTP-verbindingen: er is niet meer dan één nodig. We schakelen automatische omleiding uit. Om het volgende aanbevolen veld in te stellen: “Expect: 100-continue”, inclusief het wachten op een antwoord op een downloadverzoek, kunt u de eigenschap commented out niet gebruiken, maar moet u de code in de onderstaande regel gebruiken: request.ServicePoint.Expect100Continue = WAAR;. De laatste eigenschap van de HTTP-header bevat een masker voor de ontvangen objecten; in ons geval worden alle bestanden geaccepteerd: met een willekeurige naam en extensie.

Nadat het verzoek is gevormd, moeten we een netwerkstream ontvangen waarin we de naar de server verzonden gegevens registreren. Wij gaan ook open lokaal bestand voor lezen. We wijzen een bytebuffer toe voor de tijdelijke opslag van gegevens die uit het bestand zijn gelezen; dan beginnen we in een lus te lezen en te verzenden, waarbij we gegevens naar de stream schrijven. Hierna sluiten we de netwerk- en bestandsstreams in het algemeen zoals gewoonlijk. Nadat we een antwoord van de server hebben ontvangen, controleren we de HTTP-status om te zien of deze gelijk is aan de vlag Gemaakt en vergelijken we de bestandsgrootte met het aantal overgedragen bytes; als aan beide voorwaarden is voldaan, is de overdracht geslaagd, anders is er een probleem.

Resultaten

Hiermee is de ontwikkeling van ons hulpprogramma afgerond. Daarin hebben we alle geplande functionaliteit geïmplementeerd - de vier meest noodzakelijke commando's, zonder welke geen enkele bestandsbeheermanager op een externe host kan doen. We zijn niet gebonden aan de diensten van een specifieke hosting met behulp van de API die we hebben ontwikkeld universele toepassing, communiceren met de server via standaardprotocol WebDAV. Hierdoor kon ons programma, met behulp van één code, verbinding maken met meerdere servers tegelijk (ik heb getest op Yandex.disk en Dropbox). Zoals we echter hebben gezien, verschillende diensten interpreteren en ondersteunen het protocol enigszins anders.

De verdere ontwikkeling van het programma laat ik aan jou over in de loop van het artikel waar ik op doelde mogelijke verbeteringen: dit omvat het downloaden van meerdere bestanden, het maken van een maphiërarchie, het parallelliseren van downloads en nog veel meer. Als u dieper in het WebDAV-protocol graaft, kunt u andere opdrachten implementeren om inhoud op de server te beheren.

In dit verband wil ik u veel succes wensen bij al uw inspanningen en meer... frisse lucht:). Tot ziens op de pagina's van ][!

Cloudopslag Yandex Disk kan als netwerkstation op uw computer worden aangesloten met behulp van het WebDAV-protocol. Nadat u de netwerkschijf hebt aangesloten, kunt u vanaf uw computer met Yandex-cloudopslag werken, net als met een gewone schijf in de operatiekamer Windows-systeem.

In Yandex.Disk kunt u uw bestanden in de cloud opslaan, waarbij u interactief met de opslag kunt werken speciaal programma-client, of het beheren van uw gegevens via de webinterface met behulp van een browser.

Wanneer u een speciaal programma van Yandex gebruikt, worden uw bestanden tegelijkertijd op uw computer en in de cloudopslag opgeslagen, en wanneer u de webinterface gebruikt, worden uw gegevens alleen in de cloudopslag opgeslagen.

U kunt Yandex.Disk ook als netwerkstation gebruiken. Hierdoor hebt u rechtstreeks toegang tot uw cloudopslagbestanden in Verkenner. De Drive wordt met de computer verbonden via het WebDAV-protocol.

WebDAV (Web-based Distributed Authoring and Versioning) - vertaalt zoiets als dit: webtools voor gedistribueerde ontwikkeling en versiebeheer. Dit is een set extensies die bovenop worden geïnstalleerd HTTP-protocol, waarmee gebruikers samen bestanden op een externe webserver kunnen bewerken en beheren.

Nadat u Yandex.Disk als netwerkstation op uw computer hebt aangesloten, heeft u toegang tot alle inhoud van de cloudopslag in deze rekening. In dit geval is verbinding via WebDAV alleen beschikbaar als er een internetverbinding is. Als de internettoegang is uitgeschakeld, wordt in dit geval de toegang tot de netwerkschijf beëindigd.

Een ander kenmerk van het gebruik van Yandex.Disk met behulp van het WebDAV-protocol is dat alle gegevens in deze cloudopslag zich in de cloud bevinden en niet op uw computer. Je werkt met cloudopslag zoals een gewone schijf op je computer, en alle gegevens staan ​​er fysiek op externe server Yandex.

Als u al een clientprogramma op uw computer hebt geïnstalleerd en u cloudopslag op uw computer gebruikt, kunt u, wanneer u Yandex.Disk via WebDAV aansluit, bovendien een netwerkstation met uw andere Yandex-cloudopslag op uw computer aansluiten.

Mogelijk hebt u meerdere cloudopslagplaatsen in Yandex. Dit komt vrij vaak voor, omdat veel gebruikers mogelijk meerdere e-mailaccounts in Yandex hebben. Yandex.Disk is gekoppeld aan de e-mail postbus, zodat deze gebruikers automatisch meerdere cloudopslagopties hebben die ze kunnen gebruiken.

Hoe Yandex.Disk als netwerkstation op een Windows-computer aan te sluiten

Om een ​​netwerkstation in het Windows-besturingssysteem aan te sluiten, moet u eerst klikken klik met de rechtermuisknop via het pictogram “Computer” of “Deze computer” op het bureaublad of via het menu “Start”. Vervolgens moet u het contextmenu-item "Netwerkstation toewijzen..." selecteren.

U kunt een netwerkstation op een andere manier aansluiten dan in het Verkenner-venster dat wordt geopend op het tabblad “Computer”. Daar moet u "Netwerkstation toewijzen" selecteren.

Vervolgens wordt het venster "Map network drive" geopend. In dit venster kunt u een letter voor de nieuwe netwerkschijf selecteren. Standaard selecteert Windows automatisch een beschikbare letter van het alfabet. Indien nodig kunt u de stationsletter wijzigen.

In het veld "Map" moet u het volgende adres invoeren:

https://webdav.yandex.ru

Standaard wordt de optie “Herstellen bij inloggen” geactiveerd.

Nadat u de selectie van de instellingen hebt voltooid, klikt u op de knop "Gereed".

Nadat u de netwerkschijf succesvol hebt aangesloten, wordt het venster “Windows Security” geopend.

Hier moet u in het veld "Gebruiker" de login voor uw Yandex.Disk-account invoeren. Omdat de login is gekoppeld aan een mailbox in Yandex, moet u er rekening mee houden dat u in dit geval niet hoeft in te voeren volledig adres e-mail, maar alleen de login (wat vóór de “hond” komt).

Voer in het veld "Wachtwoord" het wachtwoord voor uw account in. Activeer vervolgens de optie “Inloggegevens onthouden” om te voorkomen dat u uw gegevens elke keer opnieuw invoert wanneer u verbinding maakt met een netwerkstation. Klik vervolgens op de knop "OK".

Hierna wordt het Explorer-venster geopend cloud-opslag Yandex.Schijf. Alle bestanden en mappen die zich in deze specifieke cloudopslag bevinden, worden hier weergegeven.

In het Explorer-venster worden alle netwerkstations die op uw computer zijn aangesloten, weergegeven in het gebied "Netwerklocatie".

Nu kunt u de Yandex-cloud als een gewone schijf op uw computer gebruiken.

Hoe een netwerkstation Yandex WebDAV los te koppelen

Om de webdav yandex-schijf los te koppelen van uw computer, moet u eerst op het pictogram "Computer" of "Deze computer" klikken en vervolgens op contextmenu U moet "Netwerkstation verbreken..." selecteren.

In het venster dat wordt geopend " netwerk schijven", je moet benadrukken vereiste schijf en klik vervolgens op de knop "OK".

Hierna wordt het Yandex.Disk-netwerkstation losgekoppeld van uw computer.

Conclusies van het artikel

U kunt de Yandex.Disk-cloudopslag op uw computer aansluiten als een netwerkstation met behulp van het WebDAV-protocol. In dit geval gebruik je de cloud als netwerkschijf. Tegelijkertijd bevinden uw bestanden zich fysiek op een externe server en kunt u er als het ware mee werken gewone schijf uw computer.

Omdat het het protocol is dat bepaalt hoe programma's en de server met elkaar communiceren, hangt bijna alles af van de keuze ervan. En hoe de klanten zullen worden gestructureerd en welke mogelijkheden ze zullen hebben om met bestanden te werken.

Vandaag willen we het hebben over de redenen die voor WebDAV hebben gekozen en er een protocol van hebben gemaakt voor Yandex.Disk-clients.

Dankzij de API die op basis daarvan is geïmplementeerd, kunnen ABBYY FineScanner, Handy Backup 7, ES Explorer en .

Voordat we een protocol kozen, hebben we de belangrijkste vereisten daarvoor geïdentificeerd:

  1. Snelheid van werken;
  2. Open licentie;
  3. Mogelijkheid om alles te realiseren noodzakelijke acties: authenticatie, ondersteuning bestandsbewerkingen, concurrerende toegang tot bestanden, het hervatten van downloads vanaf de server en het hervatten van downloads naar de server;
  4. Prevalentie - het moet werken met doelbesturingssystemen (voornamelijk Windows-wachtrij, Mac OS X, Linux) kant-en-klaar of met minimale aanpassingen.
We waren zelfs bereid om ons eigen protocol te ontwikkelen als het bestaande niet bij ons paste. Het veranderen van het protocol na de lancering zou veel manuren vergen, dus het was noodzakelijk om te studeren verschillende opties en kies degene die het beste aan onze eisen voldoet.

FTP. Dit protocol is voor werken op afstand met bestanden die door de tijd zijn getest. Maar het is gemaakt zonder rekening te houden met de vereisten informatiebeveiliging wat is het voor ons geworden aanzienlijk nadeel. Bovendien ondersteunt het niet veel van de bewerkingen die we nodig hebben, zoals het doorgeven van metadata samen met de bestandsinhoud. En daar is verbinding voor nodig speciale toepassingen.

BitTorrent. Omdat we het meteen hadden over synchronisatie tussen apparaten, zou het erg handig zijn om de verbinding ertussen te gebruiken zonder de servers te belasten, maar hiervoor zou dubbel werk op de ontwikkeling van de cliënt. Bovendien zouden er problemen ontstaan ​​bij het werken via NAT's en firewalls, wat de voordelen van het gebruik van dit protocol aanzienlijk zou verminderen.

Amazon S3. Deze opslag gebruikt een eigen protocol op basis van HTTP. Wij hebben de mogelijkheid overwogen API-gebruik S3 lieten ze dit idee echter varen vanwege het gebrek aan bekend werk met mappen erin en de noodzaak om speciale applicaties te gebruiken voor toegang.

WebDAV. Gebaseerd op HTTP en XML en eenvoudig uitbreidbaar, ondersteunt het vrijwel alles wat we nodig hebben in de specificaties. Vooraf geïnstalleerde pakketten werken er redelijk goed mee in alle doelgebieden besturingssystemen. Bovendien had de ontwikkelingsafdeling van Yandex.Disk desktopclients, die verantwoordelijk was voor de Yandex XMPP-server, op dat moment al ervaring met het werken met open protocollen XML-gebaseerd.

De belangrijkste reden dat we niet ons eigen protocol wilden maken, was dat alleen onze applicaties ermee zouden kunnen werken, en we wilden openheid.

Als gevolg hiervan hebben we uit alle besproken opties gekozen voor WebDAV. Het enige dat in het protocol ontbrak, was het informeren van de client over wijzigingen op de server, een zeer belangrijke synchronisatiefunctie. Maar aangezien het protocol uitbreidbaar is, is dit geen probleem geworden.

Na het selecteren van het protocol begon het werk aan het Yandex.Disk-prototype. We hebben onze WebDAV-server in Erlang geschreven. Mochiweb werd gekozen als raamwerk voor de webserver, een vrij lichtgewicht bibliotheek die goed bekend is bij onze ontwikkelaars. Het werd ook gebruikt in het beroemde artikel over het verbinden van een miljoen gebruikers met één server - Een komeet-applicatie voor een miljoen gebruikers. We hebben ook nagedacht over het gebruik van een Yaws-webserver, die te vergelijken is met Apache. Dit is een volwaardige webserver die statische gegevens kan verwerken, CGI-scripts kan uitvoeren en kan verwerken speciale pagina's met serverscripts. Maar we hadden dit allemaal niet nodig. Als we nu met het maken van een project zouden beginnen, zou de keuze op Cowboy vallen, omdat het daarin voorziet meer mogelijkheden om verbindingsproblemen te identificeren.

Na bestudering van het WebDAV-protocol begon men te werken aan het weergeven van bestanden en mappen op de server. De opslag voor het prototype was een mysql-database, waarin meta-informatie werd opgeslagen, en een regulier bestandssysteem om de inhoud van bestanden op te slaan. Schaalvergroting en hoge betrouwbaarheid waren in dit stadium niet vereist.

Het circuit was vrij eenvoudig omdat het een prototype was. Zoals meestal gebeurt met bestandssystemen, rees de kwestie van de beperkingen op de route. Omdat maximale lengte het pad naar de bron was niet gespecificeerd in het protocol, er werd besloten om de lengte van de padcomponent 255 tekens te maken en het aantal nestingniveaus onbeperkt. De bestandsopslagtabel zag er ongeveer zo uit:

Een van de eersten niet-triviale taken werd een lijst van de wortel, waarin niets staat. De moeilijkheid is dat de PROPFIND-methode, naast het simpelweg opsommen, ook de taak vervult van het lezen van resource-eigenschappen. Het was noodzakelijk om het verzoek correct te analyseren, om te begrijpen wat we konden doen en wat niet; vormen het juiste antwoord. De eerste client was de gvfs die in Ubuntu was ingebouwd. Nadat we het werk ermee hadden gedebugd, besloten we de verbinding vanuit Windows 7 te controleren en ontdekten dat deze bij ons niet werkte. Uit onderzoek met andere servers is gebleken dat de ingebouwde Windows-clients de naamruimte "DAV:" niet verwerken als deze standaard is verklaard, zonder voorvoegsel. Ander standaard klanten bleek toleranter en gemakkelijker verteerbaar voor de output die speciaal voor dat doel was gemaakt Windows-clients. Gelukkig was dit de enige onverenigbaarheid die we konden vinden.

Toen het werk aan de lijst was voltooid, voerden we de triviale handelingen uit: het maken van mappen en het verwijderen van bronnen.

Ik krijg een foutmelding

Als u een foutmelding ontvangt wanneer u probeert verbinding te maken via WebDAV, zorg er dan voor dat u de juiste toegangsinstellingen heeft ingevoerd. Controleer het juiste wachtwoord, de toetsenbordindeling en of de sleutel is ingeschakeld Capslock. Zorg er ook voor dat uw Drive voldoende heeft vrije ruimte voor gekopieerde bestanden. U kunt ook geen bestanden uploaden die groter zijn dan 50 GB.

Opmerking. Verbinding met de WebDAV-server vindt alleen plaats met behulp van SSL-codering. Als het programma dat u gebruikt om verbinding te maken SSL niet ondersteunt, kunt u geen verbinding maken met de server.

Ongeldige mapnaam. Voer een andere naam in.

Dit probleem treedt op omdat er een probleem is met Windows zelf dat geen WebDAV-verbindingen via het beveiligde HTTPS-protocol ondersteunt. We werken eraan dit probleem op te lossen.

Ik heb bestanden verwijderd, maar ze staan ​​niet in de Prullenbak

Bij het verwijderen via WebDAV gaan bestanden niet naar de Prullenbak, maar worden ze onmiddellijk verwijderd van de Yandex-servers. Als u bestanden via WebDAV hebt verwijderd, kunnen deze niet worden hersteld.

Schrijf naar de ondersteuningsdienst