Wie klein ist klein? Dateien sind auch nur Bytes; wenn’s also
ganz klein sein soll, tut Rubys
socket-Library aus der Stdlib. Ein einfaches Beispiel:
1 2 3 4 5 6
|
require "socket" server = TCPServer.new(2000) client = server.accept File.open("/tmp/upload.bin", "wb"){|f| f.write(client.read)} client.close server.close |
So aber bitte nicht final lösen, sondern besser scheibchenweise einlesen. Ein böswilliger Client könnte sonst einfach eine 100 GiB große Datei hochladen und dir dann den Arbeitsspeicher und die Festplatte sprengen. Auch ansonsten ist der obige Code aus Sicherheitspunkten heraus natürlich mangelhaft, aber ich wollte ja auch nicht demonstrieren, wie man Anwendungen absichert.
Wenn’s HTTP sein soll, bietet es sich an, was mit Rack zu machen. Uploads mit HTML sind auch nur Parameter, die schließlich im Rack-Handler landen. Ich habe bisher noch keine Dateien nur über Rack hochgeladen, wohl aber mit Sinatra, wozu
hier ein Artikel zu finden ist. Ich vermute, dass das Tempfile-Handling von Rack selbst kommt und dann nur von Sinatra durchgereicht wird; da müsstest du aber noch einmal nachschauen. Die HTML-Forms müssen wohl als
multipart markiert werden, damit es ordentlich funktioniert.
Vale,
Quintus
_________________
Habe den Mut, dich deines eigenen
Verstandes zu bedienen! — Immanuel Kant
Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation
auf meiner Website.Mein Blog |
GitHub-Profil | Auf Twitter:
@qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F
BCC8 BC4F