upload auf ftp server

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich wollte fragen, wie ich dateien auf einen FTP server hochladen (von meinem Pi aus). Google Suche hat leider nicht viel ergeben, da tauchen immer nur "Pi als FTP Server" Tuts auf.

    Ich habe zwar das hier gefunden:

    Code
    ftp -u ftp://userecret@ftp.example.com/my-local-file.txt my-local-file.txt


    resulatat ist aber

    Code
    -bash: ftp: commant not found

    Ich hoffe jemand weiss hier abhilfe!
    Am besten wäre es, wenn der upload eine statusanzeige hätte.

    lg tschoesi

  • Wenn ftp "command not found" dann ist ftp nicht verfügbar...

    Sehr ungewöhnlich.

    Da muss dann ftp irgendwie noch installiert werden.

    Die einfache Eingabe ftp -V ergibt auch nur not found? Oder gibt es eine Versionsanzeige?

    Was ergibt which ftp ?

    Einmal editiert, zuletzt von torque (12. August 2013 um 19:23)

  • Hallo tschoesi,

    um gleich die Antwort auf die nächste Frage zu liefern: Da es den Parameter "-u" bei "ftp" nicht gibt, wirst du nach der Installation vor dem nächsten Problem stehen. Daher solltest du dich mal mit den FTP-Befehlen auseinandersetzen. Deine "my-local-file.txt" kannst du zum Beispiel mit folgenden Befehlen auf den FTP-Server kopieren.

    Code
    pi@raspberrypi ~ $ ftp -n <<EOF
    open ftp.example.com
    user username password
    cd upload
    put my-local-file.txt
    EOF

    Gruß Georg[/code]

    Einmal editiert, zuletzt von boandlkramer (12. August 2013 um 19:43)

  • Aber ftp ist eben ftp

    Es funktioniert immer noch.

    Vielen Dank für den Hinweis auf --> [font="Tahoma"]SSHfs[/font]

    [font="Tahoma"]Was immer es ist, ich werde es finden.[/font]

    ------------------------------------------------------------------------------------------
    Habs gefunden aber noch nicht installiert:"FUSE client based on the SSH File Transfer Protocol"

    Klingt ja ordentlich sicher, könnte mir gefallen.

    Einmal editiert, zuletzt von torque (12. August 2013 um 19:49)

  • Nachdem "ftp" installiert ist kannst und im prinzip immer zum selben FTP-Server connecten willst, kannst die Zugangdaten in der ~/.netrc hinterlegen
    Also wenn du " root " bist dann /root/.netrc

    Der Clou daran ist das du dann nicht jedesmal Login + Password eingeben müsstest, das einzige was du dann nurnoch eingeben musst ist zB

    Code
    ftp meinftpserver


    und der der Verbindungsaufbau läuft wie von selbst ;)

    In der .netrc ist dafür folgendes hinterlegt

    Code
    machine meinftpserver
    login "myusername"
    password "mypassword"

    Die .netrc kann aber auch noch mehr! Was genau kannst du hier nachlesen:

    Code
    man 5 netrc

    Also zB Macros. Im .netrc steht zum Beispiel:

    Code
    machine meinftpserver
    	login "myusername"
    	password "mypassword"
    
    
    macdef uploadtest
    	cd /pub/info
    	bin
    	put filename.tar.gz
    	quit


    Und eingeben brauch ich dann nurnoch:


    Noch ein bischen was zum lesen:
    http://inhalt.serviert.de/wissen/tips_un…s_mittels_netrc
    http://www.linux-community.de/Internal/Artik…-automatisieren
    http://sysadminscorner.uherbst.de/dateitransfer/ftp.html
    http://wiki.ubuntuusers.de/Skripte/FTP-Interaktion


    Ich verstehe nur nicht was das

    Code
    cd upload


    soll? Ich bekomme nämlich als "Rückmeldung":

    Code
    upload: no such file or directory

    Mit " cd upload " wechselt man auf dem FTP-Server in das entsprechende Verzeichnis.
    Wenn dort kein "upload" Verzeichnis ist, kann er da natürlich auch nicht rein wechseln :-/

  • Hallo tschoesi,

    wie meigrafd schon gepostet hat, ist der "cd" Befehl nicht notwendig wenn du direkt in das Root-Verzeichnis des FTP-Server uploaden willst.
    Du solltest dir aber wirklich mal die Manpage zu "ftp" durchlesen, da sind die ganzen FTP-Befehle beschrieben.

    Gruß Georg

    -----------------------------------------------------------------------

    Hallo meigrafd,

    also ich muss dir wirklich mal meinen Respekt zollen. Deine Antworten sind immer sehr ausführlich und hilfreich. Da können sich viele ein Beispiel nehmen. Mach weiter so.

    Gruß Georg

  • Eine weitere Möglichkeit wäre zB auch ein Script als /bin/ftpupload

    Das kann man dann über 2 Möglichkeiten nutzen:

    Code
    ftpupload


    Und das Script fragt dich einmal welche Datei du hochladen möchtest und danach wohin es geuploaded werden soll (wenn man nichts angibt wird es nach " / " gepakt)

    Oder man gibt die geforderten Parameter beim ausführen direkt ans Script:

    Code
    ftpupload /root/datei.rar /pub/upload
  • Hallo Leute,

    mich beschäftigt gerade ein kleines, wahrscheinlich Anfängerproblem. Ich will über ein Formular Dateien
    hochladen und habe bei php-einfach folgende Zeilen gefunden und eingegeben.


    <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="datei"><br>
    <input type="submit" value="Hochladen">
    </form>


    Und dann php:

    <?php
    move_uploaded_file($_FILES['datei']['tmp_name'], "upload/datei.txt");
    ?>

    Habe auch den Ordner 'upload.php' unter var/www erstellt und ihm 777 Rechte gegeben. Den Verzeichnissen var und www auch 777 Rechte, alles unter Benutzer pi.

    Es geht aber nicht, das heißt, nach dem Hochladen befindet sich nichts im Ordner upload.php

    Weiß jemand was? (Habe Raspi B, Apache2 Debian)
    Danke schonmal.
    Klaus

    Einmal editiert, zuletzt von kgff (25. August 2013 um 00:48)


  • <?php
    move_uploaded_file($_FILES['datei']['tmp_name'], "upload/datei.txt");
    ?>

    Habe auch den Ordner 'upload.php' unter var/www erstellt und ihm 777 Rechte gegeben. Den Verzeichnissen var und www auch 777 Rechte, alles unter Benutzer pi.

    Es geht aber nicht, das heißt, nach dem Hochladen befindet sich nichts im Ordner upload.php

    Wieso überhaupt einen Ordner " upload.php " ?

    Dein PHP Script heisst upload.php aber der Ordner in den laut deiner PHP Zeile verschoben wird heisst " upload/ "

    Du solltest aber besser auch absolute Pfade nutzen also anstatt "upload/" -> "/var/www/upload/"

  • Danke für die schnelle Antwort.
    Habe den Fehler korrigiert, aber e s g e h t n i c h t ! Schei...
    Sitze hier stundenlang und drehe mich im Kreis herum.
    Ich möchte einfach nur Dateien auf den Raspi hochladen können.
    Da erschien mir das mit dem Formular doch nicht schlecht. Was kann da noch falsch sein??
    Was soll eigentlich das <form action="upload.php" ...
    Muss ich eine Datei upload.php aufmachen, die praktisch leer ist und der Inhalt der hochzuladenden Datei wird dort reingeschaufelt, oder wie kann ich das verstehen?
    Kann es sein, dass man auf den Raspi gar keine Dateien hochladen kann??

    H i l f e e e e!

  • Naja, mit deiner upload.php kannst du auch nur eine "datei.txt" hochladen, das hast du im Code so fest eingestellt dass jede Datei die über das Formular behandelt wird, in datei.txt umbenannt wird

    action="upload.php" muss man nicht angeben - das dient eben dazu anzugeben an welche verarbeitende Datei die aktion übergeben werden soll, in deinem Fall soll die hochgeladene Datei an upload.php geschickt werden ; würde man das leer oder weg lassen wäre es die aktuelle Datei die das Formular enthällt...
    So könnte man zB auch einmal eine index.php haben in der das Formular enthalten ist aber sobald man von dem Formular auf "Upload" klickt wird die Hochzuladene Datei an eine upload.php geschickt die dann alles weitere übernimmt...

    Ausserdem gibt es standardmässig eine maximale Dateigrösse (2MB) die über solche Formulare hochgeladen werden dürfen, vielleicht klappts bei dir auch deshalb nicht

    Ich hab dazu mal eine upload.php geschrieben die sowohl prüft ob es beim hochladen ein Problem gab (zB wenn die Datei zu gross ist), die maximale Dateigrösse auf 100MB stellt und das vermutlich wichtigste: Den ursprünglichen Dateinamen beibehällt:

    Spoiler anzeigen

    http://msi.to/file/14783

    [code=php]
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style>
    body {
    background-color:#0f1113;
    }
    .tab {
    letter-spacing: 0px;
    font-family: verdana, arial, helvetica, verdana, tahoma, sans-serif;
    font-size: 13px;
    text-align: left;
    color: #c8c8c8;
    font-weight: normal;
    }
    .tabred {
    letter-spacing: 0px;
    font-family: verdana, arial, helvetica, verdana, tahoma, sans-serif;
    font-size: 13px;
    text-align: left;
    color: firebrick;
    font-weight: bold;
    }
    .tabgreen {
    letter-spacing: 0px;
    font-family: verdana, arial, helvetica, verdana, tahoma, sans-serif;
    font-size: 13px;
    text-align: left;
    color: limegreen;
    font-weight: bold;
    }
    </style>
    </head>
    <body>
    <?php

    # CONFIG - START

    // Upload to which Directory?
    $TMPdir="/tmp/upload";

    # CONFIG - END

    error_reporting(E_ALL);
    ini_set("upload_max_filesize", "100M");
    ini_set('track_errors', 1);
    ini_set('display_errors', 1);
    ini_set('log_errors', 1);

    $s=" ";
    $_SELF=$_SERVER['PHP_SELF'];
    $UploadedFile = isset($_FILES["uploadfile"]) ? $_FILES["uploadfile"] : "";

    echo "<form enctype='multipart/form-data' action='".htmlspecialchars($_SELF)."' method='POST'>\n";
    echo "<b class='tab'>Datei:</b> <input name='uploadfile' type='file' size='50' maxlength='100000'>\n";
    echo "$s$s<input type='submit' value='Upload'><br/><br/>\n";
    echo "</form>\n";

    if (!empty($UploadedFile)){
    if (!is_dir("$TMPdir") AND !mkdir("$TMPdir",0777,true)) {
    echo "<b class='tabred'>Error creating temp dir $TMPdir</b><br/>\n";
    } else {
    $FileName = $UploadedFile['name'];
    $FileError = $UploadedFile['error'];
    #exec("rm -rf ".$TMPdir."/* 2>/dev/null",$output,$return_var);
    if (!move_uploaded_file($UploadedFile['tmp_name'],"$TMPdir/".$FileName."")) {
    echo "<b class='tabred'>Beim Upload trat ein Fehler auf, bitte noch mal probieren!</b> \n";
    if (isset($FileError) AND !empty($FileError)) { echo "<b class='tab'>".uploaderror($FileError)."</b>"; }
    echo "<br/>\n";
    } else {
    $FileSize = get_size($UploadedFile['size']);
    $FileType = $UploadedFile['type'];
    echo "<b class='tabgreen'>Die Datei</b> <b class='tab'>".$FileName." (".$FileSize.")</b>";
    echo "<b class='tabgreen'>wurde erfolgreich hochgeladen und befindet sich nun in</b> <b class='tab'>".$TMPdir."</b><br/>\n";
    }
    }
    }


    function get_size($size,$precision=2,$long_name=true,$real_size=true) {
    $base=$real_size?1024:1000;
    $pos=0;
    while ($size>$base) {
    $size/=$base;
    $pos++;
    }
    $prefix=get_size_prefix($pos);
    $size_name=$long_name?$prefix."bytes":$prefix[0].'B';
    return round($size,$precision).' '.ucfirst($size_name);
    }

    function get_size_prefix($pos) {
    switch ($pos) {
    case 00: return "";
    case 01: return "Kilo";
    case 02: return "Mega";
    case 03: return "Giga";
    case 04: return "Tera";
    case 05: return "Peta";
    case 06: return "Exa";
    case 07: return "Zetta";
    case 08: return "Yotta";
    case 09: return "Xenna";
    case 10: return "W-";
    case 11: return "Vendeka";
    case 12: return "u-";
    default: return "?-";
    }
    }

    # http://www.php.net/manual/en/features.file-upload.errors.php
    function uploaderror($returncode) {
    $msg="";
    switch ($returncode) {
    case 0:
    $msg = "";
    break;
    case 1:
    $msg = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
    break;
    case 2:
    $msg = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
    break;
    case 3:
    $msg = "The uploaded file was only partially uploaded.";
    break;
    case 4:
    $msg = "No file was uploaded.";
    break;
    case 6:
    $msg = "Missing a temporary folder.";
    break;
    case 7:
    $msg = "Failed to write file to disk.";
    break;
    case 8:
    $msg = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop";
    $msg.= " examining the list of loaded extensions with phpinfo() may help."
    break;
    default:
    $msg = "Unknown upload error";
    break;
    }
    return $msg;
    }

    ?>

    </body>
    </html>

    [/php]


    Wenn nur gelegendlich Dateien auf ein Linux System hochladen möchtest gibt es mehrere Möglichkeiten:

    1) WinSCP in Verbindung mit dem SCP oder SFTP Protokoll (Achtung: SFTP ist etwas anderes als FTP!) - das nutzt den SSH-Server um Dateien zu übertragen, der in 99% der Fälle bereits installiert ist

    2) Das Linux Paket lrzsz installieren sowie einen z-modem fähigen SSH-Client, zum Beispiel:
    - ZOC
    - Le PuTTY (eine modifizierte PuTTY Version mit u.a. z-modem Unterstützung, das normale PuTTY kann das nämlich leider nicht)
    - ZSSH
    - SecureCRT
    Und dann:
    - rz zum empfangen von Dateien (auf den Linux Rechner hoch laden)
    - sz datei zum verschicken von Dateien (vom Linux Rechner weg schicken also zum Client)

    3) Die Dateien mithilfe wget oder einem Text-Browser wie lynx von einem anderen WebServer direkt auf den Linux Rechner laden

    4) Auf dem Linux Rechner einen FTP-Server installieren & einrichten und dann mithilfe eines FTP-Clients Dateien hochladen... Allerdings würde ich das auf dem RPI erst als aller letzte Möglichkeit nutzen da dann permanent ein Prozess im Hintergrund läuft der CPU+RAM verbraucht obwohl er grad gar nicht genutzt wird

  • Vielen Dank. Ich werde mit deinen Hinweisen versuchen, den script zum Laufen zu bringen. Das mit der datei.txt ist ja deshalb, damit niemand irgendwas Gefährliches hochlädt.
    Na, mal sehen, ob ich es noch schaffe. Deine anderen Varianten überblicke ich jetzt nicht, damit befasse ich mich dann, wenn ich das kleine Programmchen nicht hinbekomme

    Also danke nochmal.
    Klaus

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!