FTP mit Java

Status
Nicht offen für weitere Antworten.
L

langhaar

Gast
Hallo, bin neu hier!

Ich erzeuge mit einem JAVA Programm HTML und PHP Code und möchte den gerne per Programm hochladen.

Hab' allerdings keine Ahnung, wie ich das geschicktesten mache, oder überhaupt hinbekomme.

Mein bisheriger Ansatz (nur Test) sieht wie folgt aus:

URL url = new URL( "ftp://www.fakeadress.net/files"; ) ;
URLConnection con = url.openConnection();
OutputStream os = con.getOutputStream();
for (byte i = 0; i < 10; )
os.write(i);

Der Code bewirkt allerdings rein gar nichts...?
 
B

Bebbo Erbse

Gast
Ich kenne mich nicht vollkommen in der Netzwerkprogrammierung aus, aber ich habe mit einem Buch schonmal ein Programm wie du es wahrscheinlich brauchst geschrieben.
Als erstes musst du mit dem Server kommunizieren. Der Server hält für dich auf dem Port 21 ein bestimmtes Programm bereit, mit dem du kommunizieren kannst. Dem übergibst du Daten wie deinen Usernamen auf deinem Webserver, dein Passwort, usw.
Hier findest du diese Programm(genannt: Trivia.java(das unterste Programm)). Die Portnummer solltest du auf 21 umändern(FTP):
http://www.hadiko.de/mirrors/Java_1.2_in_21_Tagen/kap18.htm

Was die ganzen Funktionen machen und wie man sie benutzt, kannst du alles auf dieser Seite durchlesen.(beginne am besten oben)

Ich hoffe es hat dir etwas weitergeholfen.
 

langhaar

Mitglied
Hallo Bebbo!

Danke für die Antwort.
Leider sehe ich bislang noch nicht, wie mich das weiterbringt.
Das von dir verlinkte Programm erzeugt mit Sockets eine Client - Server Verbindung. Auf den Server habe ich keinen Einfluss.
Wenn ich nun den Client Teil nehme, und einfach Daten übertrage, bleibt die Frage, wie werden diese verarbeitet?
Wie gebe ich z.B. den Namen des anzulegenden Files an?
Das reine Übertragen von Daten sollte ja auch mit dem von mir bereits skizziertem Code im ersten Beitrag möglich sein (Die Rückrichtung funktioniert).
Vermutlich werden diese dann bloss nicht ensprechend verarbeitet? (Also kein File angelegt und gespeichert, sondern ignoriert)

Werde nachher mal mit dem von dir gezeigtem Code experimentieren, kann mir aber irgendwie nicht vorstellen, wie das funktionieren kann.
 

Illuvatar

Top Contributor
Du kannst über HTTP, also so, wie du es da oben geschrieben hast, keine Datei auf dem Server anlegen. Dafür benötigst du FTP. Dabei sendet dein Client bestimmte Befehle an den FTP-Server, dieser erkennt die Befehle und speichert deine Datei an der richtigen Stelle. Wie so eine Sitzung aussieht, kann man sich bei vielen FTP-Programmen anzeigen lassen, das wäre zum Beispiel so etwas:
SmartFTP v1.0.983.22
Resolving host name es-wave.de...
Connecting to (es-wave.de) -> IP: 212.227.127.202 PORT: 21
Connected to (es-wave.de) -> Time = 63ms
Socket connected waiting for login sequence.
220 FTP Server ready.
USER p35002539
331 Password required for p35002539.
PASS (hidden)
230 User p35002539 logged in.
SYST
215 UNIX Type: L8
FEAT
211-Features:
MDTM
REST STREAM
SIZE
211 End
PWD
257 "/" is current directory.
TYPE A
200 Type set to A
PASV
227 Entering Passive Mode (212,227,127,202,199,144).
Opening data connection IP: 212,227,127,202,199,144 PORT: 51088.
LIST -aL
150 Opening ASCII mode data connection for file list
2268 bytes received successfully. (2.21 KB/s) (00:00:01).
226 Transfer complete.
PASV
227 Entering Passive Mode (212,227,127,202,200,24).
Opening data connection IP: 212,227,127,202,200,24 PORT: 51224.
STOR test.txt
150 Opening ASCII mode data connection for test.txt
13 bytes sent successfully. (13 B/s) (00:00:01).
226 Transfer complete.
PASV
227 Entering Passive Mode (212,227,127,202,200,27).
Opening data connection IP: 212,227,127,202,200,27 PORT: 51227.
LIST -aL
150 Opening ASCII mode data connection for file list
2334 bytes received successfully. (2.28 KB/s) (00:00:01).
226 Transfer complete.

Die Befehle kannst du auch im RFC 959 nachlesen.

Das gibt es aber natürlich auch schon vorgefertigt. Ich habe dafür mal folgende Klasse geschrieben:
Code:
import sun.net.ftp.*;
import java.net.*;
import java.io.*;
import de.illu.util.*;

/**
 * Delegaten-Klasse für sun.net.ftp.FtpClient
 * @author Illuvatar
 */
public class FTPHandler 
{
	private FtpClient ftpc;
	public FTPHandler (InetAddress server, String username, String pass) throws IOException
	{
		ftpc = new FtpClient ();
		ftpc.openServer (server.getHostName());
		ftpc.login (username, pass);
	}
	/**
     * Wechselt das Verzeichnis
     */
    public void cd (String to) throws IOException
    {
    	ftpc.cd (to);
    }
    /**
     * Wechselt in den binary - mode.
     */
    public void binary() throws IOException
    {
    	ftpc.binary();
    }
    /**
     * Wechselt in den AscII - mode.
     */
    public void ascII() throws IOException
    {
    	ftpc.ascii();
    }
    /**
     * Führt das noop - Commando aus.
     */
    public void noop() throws IOException
    {
    	ftpc.noop();
    }
    /**
     * Lädt fil in eine neue Datei auf dem Server mit dem Namen name hoch.
     */
    public void upload(File fil, String name) throws IOException
    {
    	if (!fil.exists()){
    		throw new IllegalArgumentException ("The file doesn't exist");
    	}
    	OutputStream os = ftpc.put(name);
    	InputStream is = new FileInputStream (fil);
    	int len; byte[] buf = new byte[1024];
    	while ((len = is.read(buf)) >= 0){
    		os.write(buf, 0, len);
    	}
    	is.close();
    	os.close();
    }
    /**
     * Lädt die Datei auf dem Server mit dem Namen name in fil down.
     */
    public void download(File fil, String name) throws IOException
    {
    	OutputStream os = new FileOutputStream (fil, false);
    	InputStream is = ftpc.get(name);
    	int len; byte[] buf = new byte[1024];
    	while ((len = is.read(buf)) >= 0){
    		os.write(buf, 0, len);
    	}
    	is.close();
    	os.close();
    }
    /**
     * Beendet die Verbindung.
     */
    public void quit() throws IOException
    {
    	ftpc.closeServer();
    }
}

Das benützt allerdings eine Klasse aus sun.net, d.h. es ist nicht garantiert, dass diese Klasse auch in späteren JDK-Versionen bestehen bleibt.
 
G

Guest

Gast
Illuvatar hat gesagt.:
Du kannst über HTTP, also so, wie du es da oben geschrieben hast, keine Datei auf dem Server anlegen. Dafür benötigst du FTP.

Wieso denn HTML? Ich hab' doch eine FTP Verbindung aufgebaut, indem ich als Protokoll FTP angegeben habe...

Dabei sendet dein Client bestimmte Befehle an den FTP-Server, dieser erkennt die Befehle und speichert deine Datei an der richtigen Stelle.

Jetzt wird's wärmer!
Das hilft mir weiter und erklärt auch, warum ich den Mechanismus bislang nicht nachvollziehen konnte.
DANKE!!!
 
S

stev.glasow

Gast
Hi, von diesen selbst implemtierten Ftp-Clients würde ich abraten, und besonders von diesen URL basierten, da Sun dort nur den alten Standart implemtiert hat, was zu erheblichen Problemen führen kann (und auch wird).
Schau dir mal http://jakarta.apache.org/commons/net/ an.
 

langhaar

Mitglied
Illuvatars Code hat bei mir einwandfrei gearbeitet.
Fals jemand das gleiche Problem hat wie ich, ergänze ich mal,
dass es auch wesentlich einfacher geht:

Code:
URL url = new URL( "ftp://user:pswd@www.rl.gfx-networks.net/files/text.xxx;type=i");
URLConnection con = url.openConnection();
OutputStream os = con.getOutputStream();
for (byte i = 0; i < 10;i++)
os.write(i);
		  	
os.close();

Somit fehlte in meiner ersten naiven Lösung nur die Angabe des Ausgabefiles in der Url!
(Ausserdem hatte ich das i++ vergessen)
Das type=i setzt den Übertragungsmodus auf binary.
 
S

stev.glasow

Gast
FTP client support in JDK strictly follows the standard recommendation (RFC1738), but it has several downsides:

* It fundamentally differs from the third-party FTP client libraries; these implement RFC959 rather than RFC1738.

* RFC959 is implemented in most desktop FTP-client tools. Many Java programmers use these tools to connect to FTP servers. As a matter of taste, these tools most likely prefer RFC959-like libraries.

* The URL and URLConnection classes only open streams for communication. The Sun library offers no straight support for structuring the raw FTP server responses into more usable Java objects like String, File, RemoteFile, or Calendar. So we have to write more code just to write data into a file or to exploit a directory listing.

* As explained in section 3.2.5 of RFC1738, "Optimization," FTP URLs require that the (control) connection close after every operation. This is wasteful and not efficient for transferring many small files. Furthermore, extremely restrictive FTP servers may consider such a communication overhead as an evil network attack or abuse and deny further service.

* Finally, it lacks several useful features.

For all or any of these reasons, using a third-party library is preferable.
Quelle: http://www.javaworld.com/javaworld/jw-04-2003/jw-0404-ftp.html

Hinzu kommt dass der FTP-Server auch gerne mal mit einer "unsupported standard" (oder so ähnlich) antworten, was wohl auf Punkt 4 zurück zu ziehen ist.
Aber wir wollen ja keinen zwingen :wink: das sind nur gut gemeinte Ratschläge. :)
 

Illuvatar

Top Contributor
langhaar hat gesagt.:
Illuvatars Code hat bei mir einwandfrei gearbeitet.
Fals jemand das gleiche Problem hat wie ich, ergänze ich mal,
dass es auch wesentlich einfacher geht:

Code:
URL url = new URL( "ftp://user:pswd@www.rl.gfx-networks.net/files/text.xxx;type=i");
URLConnection con = url.openConnection();
OutputStream os = con.getOutputStream();
for (byte i = 0; i < 10;i++)
os.write(i);
		  	
os.close();

Somit fehlte in meiner ersten naiven Lösung nur die Angabe des Ausgabefiles in der Url!
(Ausserdem hatte ich das i++ vergessen)
Das type=i setzt den Übertragungsmodus auf binary.

Interessant, gut zu wissen :D
 

langhaar

Mitglied
@steveq

Hab' deinen vorherigen Beitrag erst nach meinen letzten Post gelesen, da wir quasi zeitgleich geschrieben haben.
Auf die apache Seite bin ich bei meinen Recherchen auch schon gestossen, wollte jedoch zunächst keine fremden Pakete benutzen, da ich von der Notwendigkeit nicht überzeugt war, ich mit fremden Paketen bislang noch nicht gearbeitet habe und doch sehr viel Overhead dabei ist.
Bin gerade dabei, mir die Sache anzuschauen.
 

millinär

Bekanntes Mitglied
sweet verry nice kurz und unkompliziert so liebe ich es
werden die daten angehängt oder wird vorher alles was in der datei ist Gelöscht?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
LarsLovstrom ConcurrentHashMap in Java bei komplexen Objekten Netzwerkprogrammierung 2
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
M HTTP Let's Encrypt und Java Trust-Store Netzwerkprogrammierung 6
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
V Browsergame mit Java(WebSocketServer) als Backend? Netzwerkprogrammierung 5
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Fragen zu Java Webservice mit Axis2 Netzwerkprogrammierung 0
M Mit Java Mail Mails an Webmailer schicken Netzwerkprogrammierung 1
mor16Euro HTTP Php website mit Java aktualisiern Netzwerkprogrammierung 6
T HTTP JAVA Browser Konsolenanfrage(JavaScript) Netzwerkprogrammierung 7
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
L Remote Desktop per Java steuern Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
J Webserver mit Java schreiben? Netzwerkprogrammierung 4
D JAVA RMI Netzwerkprogrammierung 1
K HTTP Mit Java HTML Codeauslesen um damit zu arbeiten Netzwerkprogrammierung 7
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
A Bestimmter URL/Certificate per Java immer vertrauen (Trustmanager/HostnameVerifier) Netzwerkprogrammierung 1
T VPN-Verbindung über Java Netzwerkprogrammierung 4
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
L FTP Java Interpreter unterbindet SSL Handshake Netzwerkprogrammierung 2
C IFrame mit java auslesen Netzwerkprogrammierung 1
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
C Datensammlung mit Java RMI Netzwerkprogrammierung 0
K Java Jsoup : OnLoad Netzwerkprogrammierung 0
S Java Chat Server Netzwerkprogrammierung 8
Carres HTTP Vorhandenen Session-ID Cookie von Firefox, Chrome oder IE in Java verwenden Netzwerkprogrammierung 2
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
Z HTTP HTML Element auslesen in Java Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
Thallius HTTP HTTPS unter Java 1.6 schlägt fehl Netzwerkprogrammierung 4
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
P Chat in Java Netzwerkprogrammierung 3
C java.net.ConnectException: Operation timed out? Netzwerkprogrammierung 2
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
T curl request in java umwandeln Netzwerkprogrammierung 4
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
L Java RMI Objekt konsistenz Netzwerkprogrammierung 1
H Portforwarding umgehen in Java? Netzwerkprogrammierung 5
D Response in Java Servlet erzeugen Netzwerkprogrammierung 0
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
E HttpUrlConnectionExample cannot be resolved to a type / Java 8 Netzwerkprogrammierung 1
F Socket Java Server mit Android App, Antwort vom Server an App Netzwerkprogrammierung 5
M Java-Programm aus dem Web laden Netzwerkprogrammierung 3
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
J access denied (“java.net.SocketPermission”…) mit Java 8 Netzwerkprogrammierung 1
N CURL requests in Java Netzwerkprogrammierung 6
P Kritische Java-Anwendung und Citrix veröffentlichen Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
1 Netty NIO oder Java IO Netzwerkprogrammierung 2
1 Via Java mit WLAN Netzwerken verbinden Netzwerkprogrammierung 5
J Java Service Wrapper Netzwerkprogrammierung 1
K Mit Java ASPX Webseite fern steuern Netzwerkprogrammierung 2
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
K Emailsenden via Java Applikation Netzwerkprogrammierung 5
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
P PHP Script per Java ausführen Netzwerkprogrammierung 2
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T php/java-bridge Netzwerkprogrammierung 16
D Webseite(mit JavaScript-Element) mit Java auslesen Netzwerkprogrammierung 0
G Multiple Clients and one Server --> java.lang.NullPointerException Netzwerkprogrammierung 1
E Java Server übers Internet erreichen Netzwerkprogrammierung 4
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
windl AirPlay mittels Java Netzwerkprogrammierung 0
R Email mit Java API Netzwerkprogrammierung 1
P Java Deauth / Deauthentication request Netzwerkprogrammierung 10
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
R Java - Socketprogrammierung Netzwerkprogrammierung 10
B Methoden und Konstruktoren von Java.net package werden nicht geladen Netzwerkprogrammierung 2
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
N Socket java.net.ConnectException Netzwerkprogrammierung 5
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20

Ähnliche Java Themen

Neue Themen


Oben