wie das hochladen mehrerer Dateien mit Hilfe von java
Ich hoffe jemand kann mir helfen (mal wieder).
Habe ich eine sehr große Anzahl von smmll Dateien (über 4000) jeweils nur ein paar K.
Ich habe geschreiben Sie ein FTP-Programm in java, die übertragen jede Datei einzeln, aber es nimmt eine sehr lange Zeit. Auch die Handshake-overhead scheint das problem noch verschlimmern.
Was ich möchte in der Lage sein zu tun ist, öffnen Sie die FTP-Verbindung senden Sie alle Dateien, schließen Sie es dann erneut.
Ich weiß, dass dies möglich ist, in FTP, aber wie genau erreichen Sie diese in java ist mir schleierhaft.
Momentan habe ich die Dateinamen in ein array Parsen durch Sie ist das kein problem. Ich habe versucht, den Aufruf der folgenden Klasse, und übergeben Sie den Dateinamen, aber nach mehreren Stunden war es immer noch verschieben etwa 1 Datei pro Sekunde.
package website;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class ftpUpload {
public ftpUpload(String target, String savename, String localFilePath) {
URL url;
try {
url = new URL(target + savename + ";type=i");
URLConnection con = url.openConnection();
BufferedOutputStream out =
new BufferedOutputStream(con.getOutputStream());
FileInputStream in =
new FileInputStream(localFilePath + savename);
int i = 0;
byte[] bytesIn = new byte[1024];
while ((i = in.read(bytesIn)) >= 0) {
out.write(bytesIn, 0, i);
}
out.close();
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Gibt es eine Möglichkeit, kann ich die Verbindung mit der ftp-site-Benutzernamen und Passwort,
dann senden Sie die Dateien
und schließlich die Verbindung schließen?
Dies scheint mir einfacher als das erstellen mehrerer threads zu senden, Dateien gleichzeitig.
Jede Beratung greatfully erhalten.
Paul
- Wäre es akzeptabel, Dateien zippen, dann hochladen, nur die komprimierte Datei? Das kann wirklich leicht in Java erfolgt.
- Können Sie zip, um die Dateien und senden Sie die zip-Datei statt? Oder ist der server erwartet individuelle Dateien?
- Warum gehst du nicht erstellen Sie ein Archiv, das alle Dateien enthält, und senden Sie eine Datei anstelle von mehreren K ' s?
- LOL, zip-in dreifacher Ausführung 😉
- Es gibt zwei Wege für Sie zu gehen. First off, über FTP: Eine Datei pro Datenverbindung. Zeitraum. Sie können nicht übertragen Sie mehrere Dateien mit den gleichen Daten-Verbindung. Also entweder senden Sie Sie ein zu einer Zeit ('PASV', 'STOR')...oder Sie packen Sie in eine Zip-Datei und senden Sie, die.
- macht es dieser eine ZIPLICATE post? Dann sind wir in großen Schwierigkeiten 🙂
- Können Sie starten mehrere threads und geben jedem von Ihnen eine "Scheibe" von Ihrem array von Dateinamen, die hochgeladen werden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es möglich ist, senden Sie mehrere Dateien in einer Sitzung mit URLConnection, das heißt, Sie erhalten den overhead beim öffnen und schließen der Sitzung für jede Datei.
FTPClient von commons net unterstützt mehrere Operationen in einer Sitzung. Zum Beispiel (exception handling entfallen):
Helfen sollte.
Wenn Sie noch eine bessere Leistung brauchen, ich sehe keine andere alternative als die Verwendung mehrerer threads.
HttpURLConnection
tut connection-pooling hinter die kulissen.Nachdem viele Tests, die ich gefunden habe, Probleme mit der Zuverlässigkeit mit mehreren ftp-threads auf öffentlichen Servern das ist, was ich brauche in diesem Fall. Die meisten (wenn nicht alle) ftp-Server beschränken die maximale Anzahl der verbindungen und auch die Begrenzung der maximalen Anzahl von gleichzeitigen verbindungen von der gleichen IP-Adresse. Zwei gleichzeitige verbindungen von der gleichen IP scheint das einzige zu sein, garantiert maximale Sie sind erlaubt. Die realistische option, wie oben vorgeschlagen ist, um die zip-Dateien und ftp-einer einzigen Datei. Sie können entpacken Sie die Datei, wenn es wird es mit einem php-Skript (sofern der server dies unterstützt, entpacken Sie benötigen, um zu überprüfen, ob der php-build). Schließlich, wenn Sie wie ich Sie benötigen zum hochladen von mehr als 10.000 Dateien viele ftp-Server wird nicht mehr als 9998-Dateien (10,000 inlcuding . und ..)
Wenn jemand weiß, von einem ftp-server kostenlos oder Billig, die unterstützt ZipArchive in der php-build und wird die Liste der mehr als 9998-Dateien bei der Anforderung einer Datei mit der Auflistung der in ftp können Sie bitte lassen Sie mich wissen.....