yanmai
Goto Top

C-sharp ZIP-Ordner an PHP senden

Hallo ihr Administratoren,
ich habe nun eine PHP Datei gebastelt, die einen ZIP auf einen Server lädt. Ich habe den ZIP über ein HTML Formular hochgeladen. Jetzt möchte ich, dass das C# Programm einen ZIP zu dem PHP Script sendet.

PHP:
if($_FILES['zip-file']['name'] != '') { ....  

C#:
string URL = "http://.......server.php";  
                    WebClient webClient = new WebClient();
                    webClient.Headers.Add("Content-Type", "binary/octet-stream");  

                    byte result = webClient.UploadFile(URL, "POST", path);  
                    string responsefromserver = Encoding.UTF8.GetString(result);
                    MessageBox.Show(responsefromserver);

Wobei path der Pfad zu der lokalen ZIP Datei ist. Aber es funktioniert nicht, weil ich denke mal noch den Parameter "zip-file" brauche. Wie löse ich das Problem?

Content-ID: 337826

Url: https://administrator.de/contentid/337826

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

132895
132895 14.05.2017 aktualisiert um 09:47:20 Uhr
Goto Top
Der Webclient ist dafür eine suboptimale Wahl, besser du machst das mit einem WebRequest
Siehe: http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequ ...

Wenn du aber sowieso nur mit c# hoch lädst, brauchst du das mit dem Form-Data gedöns im PHP-Skript nicht, dort reicht dann ein
$postdata = file_get_contents("php://input");  
Um an die Raw-Daten der mit POST hochgeladenen Datei zu kommen.

Gruß
Yanmai
Yanmai 14.05.2017 um 11:27:59 Uhr
Goto Top
Irgendwie will das noch nicht ganz funktionieren.
Der C# Quelltest sieht so aus:

using (var client = new WebClient())
                    {
                        byte response = client.UploadFile("http://test.com/server.php", "POST", path);  
                        MessageBox.Show(client.Encoding.GetString(response));
                    }

PHP:
$postdata = file_get_contents("php://input");  
            echo $postdata . "xd";  

            $array = explode(".", $postdata);  

            $name = $array;
            $ext = $array[1];

            echo $ext . "hallo";  
            
            if($ext == "zip") {  
                $path = "/var/www/web23442894/html/sozi-umfrage/test/";  
                $location = $path . $file_name;

                if(!file_exists($location)) {
                    if(move_uploaded_file($_FILES['zip-file']['tmp_name'], $location)) {  
                        $zip = new ZipArchive;
                        echo "sucess";  
                    }
                } else {
                    echo "file exists";  
                }
            } else {
                echo "False ext";  
            }

Aber weder für $postdata noch für $ext bekomme ich einen Wert :/
132895
132895 14.05.2017 aktualisiert um 12:08:45 Uhr
Goto Top
Nee, das ist ja wieder alles miteinander vermixt, das kann ja nich, ich hab ja extra gesagt nutze den WebRequest damit kannst du alles wesentlich genauer steuern.

Ganz rudimentäres Beispiel ohne jegliches Error-Handling

c#
using System;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace HttpPostData {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"http://localhost/upload/raw.php");  
            request.Method = "POST";  
            request.ContentType = "application/octet-stream";  
            Byte data = File.ReadAllBytes(@"c:\Pfad\demo.zip");  
            Stream rs = request.GetRequestStream();
            rs.Write(data, 0, data.Length);
            WebResponse response = request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            MessageBox.Show(reader.ReadToEnd());
            reader.Close();
            rs.Close();
        }
    }
}

PHP

<?php
$data = file_get_contents("php://input");  
if ($data){
	file_put_contents("my.zip",$data);  
        echo "File saved as my.zip.";  
}else{
       echo "No data given.";  
}
?>
Yanmai
Yanmai 14.05.2017 um 12:12:28 Uhr
Goto Top
Vielen Dank!
An welcher Stelle genau wird der ZIP jetzt gespeichert? Davor muss ich dann noch eine Abfrage einbauen, ob der Ordner bereits vorhanden ist.
132895
132895 14.05.2017 aktualisiert um 12:17:26 Uhr
Goto Top
Zitat von @Yanmai:
An welcher Stelle genau wird der ZIP jetzt gespeichert?
Im aktuellen Verzeichnes des PHP-Skripts, siehst du ja hier:
file_put_contents("my.zip",$data);

Davor muss ich dann noch eine Abfrage einbauen, ob der Ordner bereits vorhanden ist.
Sicher:
if (!file_exists("/folder/path")){  
    mkdir("/folder/path");  
}
Yanmai
Yanmai 14.05.2017 um 12:19:58 Uhr
Goto Top
Und im ersten Parameter der Methode file_put_contents muss dann der Pfad rein, wenn ich die wo anders speichern möchte oder wie? Und der ZIP wird richtig als Ordner behandelt und nicht als Datei?
132895
132895 14.05.2017 aktualisiert um 21:41:23 Uhr
Goto Top
Zitat von @Yanmai:
Und im ersten Parameter der Methode file_put_contents muss dann der Pfad rein,
Jepp. Ein Pfad mit Dateiname. Les doch bitte auch mal die Doku, Danke.
wenn ich die wo anders speichern möchte oder wie?
Pfad und Dateiname angeben fertig!
Und der ZIP wird richtig als Ordner behandelt und nicht als Datei?
Natürlich als Datei, was dachtest du denn, das er seine Glaskugel zückt und das selber entpackt? Das musst du natürlich selbst noch machen, min Jung!
http://php.net/manual/de/ziparchive.extractto.php
Yanmai
Yanmai 21.05.2017 um 19:58:59 Uhr
Goto Top
Vielen Dank,
jetzt muss ich dieser Datei aber noch einen Wert über POST mitgeben. Wie mache ich das? Also POST und den ZIP
132895
132895 21.05.2017 aktualisiert um 20:59:05 Uhr
Goto Top
Zitat von @Yanmai:

Vielen Dank,
jetzt muss ich dieser Datei aber noch einen Wert über POST mitgeben. Wie mache ich das? Also POST und den ZIP
Die oben gezeigte Methode ist dafür nicht geeignet, aber genau deswegen habe ich dir ja oben schon den Link gegeben der zeigt wie du Multipart-Form Daten zusammen baust und übermittelst
http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequ ...
Damit du es so verarbeiten kannst wie wenn ein normales Formular übermittelt worden wäre.
Yanmai
Yanmai 31.05.2017 um 16:55:23 Uhr
Goto Top
Kann ich auch die ID des Users über $_GET mitgeben oder ist das gefährlich?`Ich benutze ein HTTPS Protokoll...