String sicher und schnell auf FTP hochladen?

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von DrVisualBasic.

    Pass mal auf DoDo... Jetzt überleg dir mal... wieso hab ich keine Ahnung davon... richtig... hab noch nie mit PHP programmiert... Warum mache ich jetzt wohl Copy und Paste... ach ja stimmt ja... ich hab ja gefragt was es noch für andere Methoden meiner gegenüber gibt... und jetzt hab ich eine Antwort wo es aber noch Probleme zu klären gibt... diese bitte ich jemanden zu lösen. Statdessen wird mir vorgeworfen das ich das nicht kann^^ überleg dir lieber erstmal was du schreibst wenn du mir nicht helfen möchtest!
    Nun mit PHP sehe ich hier nichts, du hast lediglich Bilder von deinem Sourcecode gepostet und das sieht für mich stark nach VB.NET aus. Dort hast du eine Methode angepasst, was auch gut ist, nun hast du natürlich auch die Varible angepasst von Dim result As Byte() nach Dim result As String, da die UploadString() Methode einen String zurückt gibt.
    Jetzt hast du noch Fehler in der Zeile darunter, wo vom alten Code versucht wurde den Quelltext, welcher von der Methode UploadFile als Bytearray zurück gegeben wurde, in einen String umzuwandeln. Dies funktioniert nach deiner Anpassung natürlich nicht, weil das Result nun kein Bytearray mehr ist sondern bereits ein String.

    Das hat NICHTS mit PHP zu tun, sondern einfach mit dem Verständnis des Codes den du kopiert hast, dies ist wieder mal ein wunderbares Beispiel dafür das viele nur Kopieren aber nicht wissen was die einzelnen Codezeilen bewirken, ansonsten hättest du dir das denken können, das du die Konvertierungs Zeile wegschmeißen kannst.

    Edit: So nun habe ICH mal das getan, was eigentlich deine Aufgabe wäre und mich bischel näher mit der Methode UploadString() beschäftigt.
    Die läd natürlich nicht automatisch eine Datei auf den angegebenen WebSpace sondern schickt einfach Variablen mit der angegebenen Methode an ein Script. Also kann bei dem letzten Parameter nicht einfach ein Text angegeben werden der hochgeladen werden soll.

    VB.NET-Quellcode

    1. wc.UploadString("server.de/datei.php", "post", "irgendwas=Hallo Welt")


    Nun existiert im PHP Script die Vraible in der POST-Collection und damit kann im PHP Script dann irgendwas gemacht werden

    PHP-Quellcode

    1. echo $_POST['irgendwas'];


    Hierbei wird nun also die Variable die vorher in VB gesetzt wurde im PHP Script ausgegeben.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Es gibt für dich also 2 Möglichkeiten

    1. Speichere die Datei lokal und nutze UploadFile()
    2. Übergebe den Text als Variable an das Script und speichere den Text dann in PHP in eine Datei rein. Hierzu findest bestimmt was im Netz (google.de/search?q=php+text+schrieben) auch wenn kein PHP kannst, wer Programmieren kann sich auch mit einer fremden Sprache befassen und wird es relativ schnell verstehen. Man muss dabei nicht PHP können, aber wenn man eine funktion nicht kennt schau man in die PHP Referenz php.net nach.
    @Dodo's Lösungsvorschlag. Das wird nicht funktionieren. Wieso das so ist, weiß ich nichtt, ich weiß halt nur das es nicht funktioniert.
    Anstatt UploadString einfach UploadValues nehmen.

    VB.NET-Quellcode

    1. Dim wc As New WebClient
    2. Dim nv As New NameValueCollection
    3. nv.Add("t", "Test")
    4. Dim result As Byte() = wc.UploadValues(server+php, "POST", nv)
    5. MessageBox.Show(System.Text.Encoding.UTF8.GetString(result))
    Welcher funktioniert nicht? Also bei mir im Test haben eben beide funktioniert. Über UploadString habe ich eine Variable und ein Wert übergeben, den konnte ich in PHP auslesen und somit hätte ich ihn auch in eine Datei schreiben können.
    Hast du das auch so angegeben

    VB.NET-Quellcode

    1. wc.UploadString("server.de/datei.php", "post", "irgendwas=Hallo Welt")


    Also mit dem "=" in dem String?? irgendwas wäre hierbei die Variable auf die man in dem $_POST Array drauf zugreifen kann.
    Das funktioniert doch ganz gut?
    Ich würde das so machen wie Dodo schrieb, Datei Local erstellen und dann über php und Post hochladen.
    Oben hatte wer einen Link zu einem Tutorial entnommen, so funktioniert es recht gut

    VB.NET-Quellcode

    1. Dim Server As String = "http://.../upload.php?d=upload/"
    2. Private Function Uploadfile(ByVal File As String)
    3. Dim wc As New WebClient
    4. Using wc
    5. wc.Encoding = System.Text.Encoding.Default
    6. wc.Headers.Add("Content-Type", "binary/octet-stream")
    7. Dim result As Byte() = wc.UploadFile(Server, "POST", File)
    8. Dim s As String = System.Text.Encoding.UTF8.GetString(result, 0, result.Length)
    9. ' Die echo's die im PHP ausgegeben werden, werden hier in einer MsgBox angezeigt.
    10. Return s
    11. End Using
    12. End Function


    oder bin ich wieder bei einem anderen Part ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lawliet“ ()

    @Dodo
    *facepalm weil wegen eigener Dummheit*. Jo hast recht, bei UploadValues funktionierts aufjedenfall.

    @Lawliet
    Es wäre schwachsinnig immer in eine Datei zu schreiben, nur um sie dann hochzuladen. Dann lieber direkt UploadString (bzw. UploadValues).
    Ok, jetzt verstehe ich auch die Unterhaltung.
    ich habe denn ersten, zweiten und dritten Post gelesen, und das meiste überflogen.
    sry , ich enthalte mich wieder ;)
    Er könnte auch meine POST Lib nehmen [Release] [Version 4.0] HttpPostRequestLib

    Da kann man das upload Script nämlich nutzen

    VB.NET-Quellcode

    1. reg.Post.Add("d", "ordner")
    2. reg.Files.Add("file", "dateiname.txt", System.Text.Encoding.UTF8.GetBytes("Hallo Welt"), MimeTypes.Text.Plain)
    3. ' Request abschicken
    4. Sourcecode = reg.Submit()


    Im PHP Script müsste man dann nur $_GET['d'] in $_POST['d'] umtauschen, da das Verzeichnis über POST geschickt wird.
    Danke euch allen schonmal für die Hilfen :) Ich werde sie mir irgendwann alle mal durchlesen um jede Methode zu erlernen.
    Allerdings ist viel davon komplex und ich mag es einfach! Ich programmiere schmale Vorgänge und versuche sie trotzdem möglichst effizient zu halten!
    Deswegen habe ich mir jetzt folgendes ausgedacht... Einen PHP Aufruf

    VB.NET-Quellcode

    1. WebBrowser1.Navigate("http://......Hochladen.php?w=Hier steht mein Text")


    Das PHP Script welches ich damit aufrufe ließt den String hinter dem ?w= aus und speichert in in ein txt Dokument auf dem Server!
    Vorher löscht es allerdings noch die TXT Datei damit es auch immer nur die aktuelle Information enthällt!

    PHP-Quellcode

    1. <?php
    2. leeren("dokument.txt"); // Datei die geleert werden soll.
    3. function leeren($file) {
    4. $datei = fopen($file,"w");
    5. fputs($datei,"");
    6. fclose($datei);
    7. }
    8. $msg = $_GET['w']; // Aufgerufen wird das Script über die URL welche zur PHP Datei führt - an die URL wird folgendes angehangen: ?w=
    9. $logfile= 'dokument.txt'; // Speicherort im Root Verzeichnis bzw auf dem Server der PHP datei
    10. $fp = fopen($logfile, "a");
    11. fwrite($fp, '');
    12. fwrite($fp, $msg);
    13. fclose($fp);
    14. ?>



    Meine einzige Frage hierzu ist wie ich den Webbrowser weglassen kann? Wie kann ich den Link ohne das Webbrowser Control innerhalb meines Programmes aufrufen? Das heisst auch kein Process.Start oder so was...
    Kann man das auch irgendwie mit dem WebClient machen?

    Natürlich muss ich auch mein Ergebnis Kontrolieren können... Das heisst ich brauche einen Request wenn das Script ausgeführt wurde...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DrVisualBasic“ ()

    Ich programmiere schmale Vorgänge und versuche sie trotzdem möglichst effizient zu halten


    Wie du das jetzt machen willst ist das alles andere als Effizient oder Schmal. Der GET Vorgang kann nur eine bestimmt Anzahl von Zeichen enthalten die über die URL übergeben werden können, zudem kannst du nicht direkt Sonderzeichen übergeben sondern nur Zeichen die auch in der URL erlaubt sind, und das sind nicht besonders viele.

    Deine Methode um in die Textdatei zu schreiben ist auch alles andere als Effizient und das hat absolut NICHTS damit zu tun das du kein PHP kannst, mit der Ausrede kannst du nicht kommen, denn da sind lediglich die Befehle leicht anders, aber das eigentliche Programmieren ist sogut wie das selbe.

    Was du da im PHP Script machst sähe in VB so aus

    VB.NET-Quellcode

    1. File.WriteAllText("pfad\datei.txt", "")
    2. File.AppendAllText("pfad\datei.txt", "inhalt")


    Was wird gemacht, es wird die Datei geöffnet und beschrieben mit einem leeren Inhalt, danach öffnest du die Datei nochmal und ERWEITERST sie mit einem Inhalt. Wo ist dabei die logik?? Wenn eine Datei zum Schreiben geöffnet wird, wird sie automatisch Überschrieben.
    Das wüsstest du, hättest du dir die fopen-Referenz auf php.net angesehen

    'w' Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.
    'a' Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.

    Quelle: php.net/manual/de/function.fopen.php

    Wenn du es also mit dem PHP Script so machen willst, dann kannst du ganz zurück zu gehen und die Methode mit dem WebClient und UploadString() nutzen, denn diese macht nichts anderes als einen String über POST oder GET an das angegebene Script zu übermitteln. Ich würde dir dabei aber POST empfehlen, weil du da mehr Zeichen übergeben kannst als bei GET, zudem musst du dich nicht um das Escapen der ungültigen Zeichen bei GET kümmern.

    Wie Rinecamo sagte haben wir dir bereits so viele Beispiele gegeben, nun liegt es an dir dich damit zu befassen und zu LERNEN. Du hast es gerne Einfach? Klar hat jeder und genau darauf zielen unsere genannten Methoden ab, die beste, performanteste und schnellste Lösung. Nur weil DU sie nicht verstehst ist es noch lange nicht kompliziert.

    Wenn du weiterhin programmieren willst, solltest du dich auch langsam mal mit der Materie auseinander setzten und nicht nur immer wisch wasch Copy und Paste Code zusammen stückeln, denn genau danach siehts hier aus und diesen Eindruck vermittelst du, das du u.a. keine Ahnung hast was so manche Codezeile tut (siehe das Problem mit dem Encoding.GetString()). Man muss nicht alles wissen, das verlangt keiner, ich weiß auch nicht alles, aber ich weiß wo ich suchen muss, nämlich MSDN und dann kommt es mir noch zu gute das ich auch eine Suchmaschine wie Google bedienen kann, dass sie mir gute Resultate anzeigt wenn ich mal eine Funktion in VB nicht kenne. Programmieren heißt ein ständiger Lernprozess und sich zu verbessern und nicht mit seinem magerne Wissen was man sich irgendwie erarbeitet hat auf einer Stelle zu stehen und auf biegen und brechen etwas zu realisieren, was mit dem Wissensstand aber einfach uneffizient oder einfach unmöglich ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Danke Dodo :)
    ich verstehe was du meinst und ich bin schon dabei mir neue Themen an zu eignen. Das mit dem Encoding.GetString() war wirklich ein Copy Paste... ich habe den Code nicht selbst geschrieben und man sagte mir das er so schon ausreichent wäre. Ich habe da nicht groß nachgedacht und es war spät deswegen war es mir da auch egal. Ich befasse mich schon mit der Thematik nur PHP ist einfach voll nicht mein Ding!!!
    Ich programmiere nur in VB.net und auch wenig mit Netzwerkumgebung (also aus dem System.Net Umfeld).
    Allerdings brauche ich derzeit einige Funktionen aus diesem Berreich. Ich muss Informationen schnell hoch und runterladen können. Meine Informationen lade ich mir über einen Webclient herunter. Das habe ich mir ja auch
    selbst erarbeitet! Ich Definiere

    VB.NET-Quellcode

    1. Dim Download as New WebClient
    und lade die Infos wie folgt herunter:

    VB.NET-Quellcode

    1. Label1.Text = Download.DownloadString("http://www.....Datei.txt")


    Diesen Vorgang stecke ich jetzt in eine Schleife welche vom Backgroundworker ausgeführt wird! Soweit ist auch alles wunderbar! Jetzt möchte ich Informationen nur noch schnell hoch laden können.
    Wie aktuelle Tests von mir zeigen ist die "Get" Funktion über PHP wirklich überhaupt nicht von Vorteil. Ich muss teilweise alle 2-5 Sekunden eine Informationen über 500Zeichen mit Sonderzeichen übermitteln.
    Das bereitet mir jetzt starke Probleme!! 500Zeichen sind kein nennenswertes Datenvolumen. Vielleicht müssen da 2kb übertragen werden. das sollte mit jeder Internetleitung in 1Sekunde geschehen. Allerdings finde ich
    keine passende Option meine Info schnell und sicher zu übermitteln.

    Ich weiß du bist kein Fan davon aber kannst du mir bitte sagen wie ich das machen muss. Ich versuche wirklich alles zu verstehen und mit zu kommen. Nur das Projekt ist echt wichtig! Wenn ich ein txt Dokument so einfach auslesen kann,
    sollte es doch mit ähnlicher Geschwindigkeit im Umkehr Schluss gehen oder? Der PHP Ansatz ist wahrscheinlich gar nicht so falsch. Nur bitte hilf mir hier noch einmal. Ich glaube das man mit ein paar gezielten Codezeilen wirklich schnell ans Ziel kommt. Nur das nur mit größerem Wissen im System.Net Berreich und vorallem Routine :) Wäre dir/euch sehr dankbar!!