Frage

Ich weiß, dass diese Art von Fragen in SF existiert, aber sie sind sehr spezifisch, ich brauche einen allgemeinen Vorschlag. Ich brauche eine Funktion, Benutzerdateien für das Hochladen, die mehr von Größe sein könnte, dass 1 GB. Dieses Feature wird ein Add-On zu der bestehenden Datei-Upload-Funktion in der Anwendung sein, die auf kleinere Dateien bieten. Nun, hier sind einige der Optionen

  1. Verwenden Sie HTTP und Java-Applet. Senden Sie die Dateien in Stücke und verbinden sie auf dem Server. Aber wie die n / w drosseln.
  2. Verwenden Sie HTTP und Flex-Anwendung. Ist es besser als ein Applet WRT-Browser-Kompatibilität und alle anderen Umweltfragen?
  3. Verwenden Sie FTP oder SFTP eher anstatt HTTP als Protokoll für eine schnellere Upload-Prozess

Bitte vor.

Darüber hinaus habe ich dafür zu sorgen, dass dieser Upload-Prozess nicht behindert die Aufgabe, anderer Benutzer oder mit anderen Worten nicht isst andere Benutzer-S / W-up. Alle mögliche Mechanismen, die bei n / w Ebene getan werden kann, solche Verfahren zu drosseln?

Schließlich wollte Kunde FTP als Option haben. Aber ich denke, die Antwort mit Dateien programmatisch Handhabung ist auch cool.

War es hilfreich?

Lösung

Für Dateien auf einen Server zu senden, es sei denn, Sie Haben HTTP zu verwenden, ist FTP der Weg zu gehen. Throttling, ich bin nicht ganz sicher, zumindest nicht programmatisch.

Persönlich scheint es, wie Einschränkungen der Upload-Geschwindigkeit besser erfüllt, obwohl auf der Serverseite wäre.

Andere Tipps

Verwenden allen Client-Seite gewünschte Sprache (eine Java-App, Flex, etc.), und drücken Sie auf den Server mit HTTP PUT (kein Flex) oder POST. In dem Java-Code Serverseite, reguliert den Fluss des Bytes in der Eingangsstrom-Schleife. Ein roher, einfach, Probe-Schnipsel, die Bandbreite nicht schneller als ein durchschnittlichen <= 10 KB / Sekunde begrenzt:

InputStream is = request.getInputStream();
OutputStream os =  new FileOutputStream(new File("myfile.bin"));
int bytesRead = 0;
byte[] payload = new byte[10240];

while (bytesRead >= 0) {
    bytesRead = is.read(payload);

    if (bytesRead > 0) 
        os.write(payload, 0, bytesRead);

    Thread.currentThread().sleep(1000);
}

(mit mehr Komplexität mehr regulieren könnte man genau die einzelne Stream Bandbreite, aber es komplexer wird, wenn Socket-Puffer unter Berücksichtigung und so. „Gut genug“ ist in der Regel gut genug.)

Meine Anwendung tut etwas Ähnliches wie die oben - wir sowohl nach oben (POST und PUT) und (GET) stromabwärts Bandbreite regeln. Wir akzeptieren Dateien in dem 100s von MB täglich und haben bis zu 2 GB getestet werden. (Über 2 GB gibt es die lästigen Java int primitive Probleme zu behandeln.) Unsere Kunden sind sowohl Flex und curl. Es funktioniert für mich, kann es für Sie arbeiten.

Während FTP ist groß und alle, können Sie viele (aber nicht alle) Firewall-Probleme vermeiden, indem Sie HTTP.

Wenn Sie Bandbreite reduzieren möchten Sie können die Daten komprimiert senden (es sei denn, seine bereits komprimiert) Dieser 2-3 mal die Datenmenge speichern kann, je nachdem, was Sie senden.

Ein Beispiel für gute Praxis für große Dateien hochladen, und die verschiedenen Wege zur Bekämpfung es, einen Blick auf flickr.com (Sie können sich auf die Uploader-Seite zu gelangen müssen registrieren)

Sie bieten verschiedene Optionen, einschließlich HTTP-Form-Upload, ein Java-Desktop-Client, oder irgendeine Art von JavaScript-driven-Gadget, das ich aus nicht ganz herausfinden kann. Sie scheinen nicht überall Blitz zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top