Privates Filesharing von Browser zu Browser back to frontpage

Ich habe gestern eine Webanwendung entwickelt, die ein privates Filesharing zwischen zwei oder mehreren Browsern zulässt.

Dabei öffnet ein User im Browser (der Sender) die Anwendung ohne Anmeldung und bekommt für diese Sitzung (Neuladen generiert eine neue Sitzung) eine eindeutige ID und eine “Sharing address” zugewiesen, die er an die Dateiempfänger senden kann. Die Dateiempfänger öffnen diese Adresse und können auf die freigegebenen Dateien zugreifen.

Ansicht des Senders

Freigeben tut der Sitzungsinhaber (Sender) Dateien, indem er diese einfach per Drag&Drop (oder über den File-open-Dialog) in das Browserfenster zieht. Diese werden daraufhin nur im sogenannten Directory bekanntgegeben, jedoch nicht übertragen. Mit dieser Registrierung sehen die Empfänger die Datei(en). Fragt ein Empfänger eine Datei an, wird diese Datei an den Empfänger über den Browser des Senders gestreamed. Fordern mehrere Personen gleichzeitig eine Datei an, erfordert dies proportional entsprechend mehr Upload.

Ansicht des Empfängers

Realisiert wird diese Art der Dateiübertragung über ein dazwischen geschaltetes Relay, das auf der einen Seite per Websockets mit dem Sender kommuniziert und die Anfragen/Registrierungen weiterleitet sowie die Dateiinhalte bezieht und – ohne zwischenzuspeichern – direkt an den Anfragenden weiterreicht. Solange man diesem Relay vertraut, ist eine sichere und anonyme Kommunikation von Dateiinhalten möglich. Für das ad-hoc Übertragen von privaten Dateien an vereinzelte Empfänger ist dies eine sehr bequeme Übertragungsmöglichkeit (Dateien dürfen übrigens auch mehrere GB groß sein, das ist kein Problem). Da das Relay (derzeit?) kein Caching vornimmt und die empfangenden Daten 1:1 direkt weiterstreamed, wird derzeit auch das Vielfache an Upload-Bandbreite seitens des Senders benötigt, sollte eine Datei von mehreren Empfängern angefragt werden. Zum Verbreiten von Dateien im großen Stil eignet sich diese Methode daher nicht.

Entwickelt habe ich die Anwendung in Go und HTML5 mit Websockets. Funktioniert bislang like a charm – ich habe noch ein paar Ideen (wie zum Beispiel die freiwillige Bereitstellung weiterer Relays durch Dritte für einen zentralen Dienst, der dann als Loadbalancer zwischen dieses Relays fungiert), die ich vielleicht in nächster Zeit mal umsetzen werden. Opensourced ist der Quellcode bislang noch nicht, vielleicht später mal, wenn ich ihn etwas ausgebaut und aufgehübscht habe.

PrivateShareServer im Terminal

Im Folgenden habe ich noch einen Screencast erstellt (am besten im Fullscreen anschauen), der das private Filesharing in der Praxis zeigt. Ich freue mich wie immer über Feedback und Fragen. :-) Viel Spaß!


New comment

Comments are moderated and therefore are not published instantly.





Comments

No comments yet. Be the first! :-)