2009-07-06 8 views
1

Ich weiß, dass solche Art von Fragen in SF existieren, aber sie sind sehr spezifisch, ich brauche einen allgemeinen Vorschlag. Ich brauche eine Funktion zum Hochladen von Benutzerdateien, die größer als 1 GB sein können. Diese Funktion ist ein Add-On zur vorhandenen Funktion zum Hochladen von Dateien in der Anwendung, die kleinere Dateien unterstützt. Nun, hier sind einige der OptionenVorschläge für das Hochladen sehr großer (> 1GB) Dateien

  1. Verwenden Sie HTTP und Java-Applet. Senden Sie die Dateien in Blöcken und verbinden Sie sie auf dem Server. Aber wie man die N/W drosselt.
  2. Verwenden Sie HTTP und Flex-Anwendung. Ist es besser als ein Applet mit Browser-Kompatibilität & andere Umweltprobleme?
  3. Verwenden Sie FTP oder SFTP eher anstatt HTTP als Protokoll für eine schnellere Upload-Prozess

Bitte vorschlagen.

Darüber hinaus muss ich sicherstellen, dass dieser Upload-Prozess nicht die Aufgabe anderer Benutzer behindern oder in anderen Worten nicht s/w anderer Benutzer auffressen. Irgendwelche Mechanismen, die auf n/w-Ebene durchgeführt werden können, um solche Prozesse zu drosseln?

Letztendlich wollte der Kunde FTP als Option haben. Aber ich denke, die Antwort mit der programmgesteuerten Verarbeitung von Dateien ist auch cool.

Antwort

0

Zum Senden von Dateien an einen Server, außer Sie haben HTTP zu verwenden, ist FTP der Weg zu gehen. Throttling, bin ich mir nicht ganz sicher, zumindest nicht programmatisch.

Persönlich scheint es, als ob Einschränkungen der Upload-Geschwindigkeit auf der Server-Seite besser erreicht würden.

12

Verwenden Sie die gewünschte Client-Sprache (eine Java-App, Flex usw.) und drücken Sie mit HTTP PUT (kein Flex) oder POST auf den Server. Steuern Sie im serverseitigen Java-Code den Bytefluss in Ihrer Eingabestreamschleife. Ein roher, einfach, Probe-Schnipsel, die Bandbreite nicht schneller als ein durchschnittlicher < = 10KB/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 könnte man genauer die einzelne Stream Bandbreite regeln, aber es wird komplizierter, wenn man bedenkt . Buchse Puffer und so „gut genug“ ist in der Regel gut genug)

Meine Anwendung tut etwas ähnlich der oben -. wir sowohl nach oben (POST und PUT) und (GET) stromabwärts Bandbreite regeln. Wir akzeptieren Dateien jeden Tag in den 100ern von MB und haben bis zu 2GB getestet. (Beyond 2GB gibt es die nervtötenden Java Int Primitive Probleme zu behandeln.) Unsere Kunden sind beide Flex und curl. Es funktioniert für mich, es kann für Sie arbeiten.

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

3

Wenn Sie die Bandbreite reduzieren möchten, können Sie die Daten komprimiert senden (es sei denn, es ist bereits komprimiert). Dies kann je nach dem, was Sie senden, 2-3 mal das Datenvolumen speichern.

1

Ein Beispiel für eine gute Vorgehensweise beim Hochladen von großen Dateien und die verschiedenen Möglichkeiten, sie anzugehen, finden Sie unter flickr.com (Sie müssen sich möglicherweise anmelden, um zur Uploader-Seite zu gelangen)

Sie bieten verschiedene Optionen, einschließlich HTTP-Formular-Upload, einen Java-Desktop-Client oder eine Art Javascript-gesteuertes Gadget, das ich nicht recht herausfinden kann . Sie scheinen nirgendwo Flash zu verwenden.

Verwandte Themen