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-Key: 337826

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

Printed on: April 18, 2024 at 14:04 o'clock

Mitglied: 132895
132895 May 14, 2017 updated at 07:47:20 (UTC)
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ß
Member: Yanmai
Yanmai May 14, 2017 at 09:27:59 (UTC)
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 :/
Mitglied: 132895
132895 May 14, 2017 updated at 10:08:45 (UTC)
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.";  
}
?>
Member: Yanmai
Yanmai May 14, 2017 at 10:12:28 (UTC)
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.
Mitglied: 132895
132895 May 14, 2017 updated at 10:17:26 (UTC)
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");  
}
Member: Yanmai
Yanmai May 14, 2017 at 10:19:58 (UTC)
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?
Mitglied: 132895
132895 May 14, 2017 updated at 19:41:23 (UTC)
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
Member: Yanmai
Yanmai May 21, 2017 at 17:58:59 (UTC)
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
Mitglied: 132895
132895 May 21, 2017 updated at 18:59:05 (UTC)
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.
Member: Yanmai
Yanmai May 31, 2017 at 14:55:23 (UTC)
Goto Top
Kann ich auch die ID des Users über $_GET mitgeben oder ist das gefährlich?`Ich benutze ein HTTPS Protokoll...