Laden...

HTTP Upload richtig machen

Erstellt von Ploetzi vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.239 Views
Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 13 Jahren
HTTP Upload richtig machen

Hallo,
habe mir folgendes Programmiert:

    private static string UploadPicture(string pageURL, string picture_path)
        {
            System.Diagnostics.Debug.WriteLine("Calling URL:" + pageURL);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pageURL);
            HttpWebResponse response;
            StreamReader sr;
            string result = "";

            //request.AllowAutoRedirect = false;
            //request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

            request.Method = "POST";

            byte[] byteArray = PictureToByteArray(picture_path);

            request.ContentType = "multipart/form-data";
            request.ContentLength = byteArray.Length;


            try
            {

                Stream dataStream = request.GetRequestStream();

                dataStream.Write(byteArray, 0, byteArray.Length);

                dataStream.Close();


                response = (HttpWebResponse)request.GetResponse();

                sr = new StreamReader(response.GetResponseStream());

                result = sr.ReadToEnd();

                response.Close();
            }
            catch(Exception e){
                System.Diagnostics.Debug.Write("Fehler:" + e.ToString());
            }
            System.Diagnostics.Debug.WriteLine("Response Upload:" + result);
            return result;
        }

Wie kann ich noch zwei sachen mitsenden mit dem POST Request?
also würde ich gerne ein "uid=2asdasd" mitsenden.

   private static byte[] PictureToByteArray(string picture_path)
        {
            return File.ReadAllBytes(picture_path);
        }
S
178 Beiträge seit 2009
vor 13 Jahren

Du hast mehrere Möglichkeiten, entweder gibst du die Parameter direkt mit in der Adresse an die du übergibs, also z.B.

google.de?param=value&param2=value&uid=2asdasd

Wenn du jeweils unterschiedlich viele Parameter mit geben willst, empfiehlt es sich z.B. eine NameValueCollection oder ein Dictionary mit den Parametern und den entsprechenden Wrten zu übergeben.
Die musst du dementsprechend als bytes mit in den Request Stream schreiben.

Ich hab hier mal ein Beispiel, das ich verwende um unterschiedlich viele Parameter-Wertpaare mitzusenden.

  string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
        byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
        wr.ContentType = "multipart/form-data; boundary=" + boundary;
        wr.Method = "POST";
        wr.KeepAlive = true;
        wr.Credentials = System.Net.CredentialCache.DefaultCredentials;

        Stream rs = wr.GetRequestStream();

        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
        foreach (string key in nvc.Keys) //nvc ist vom Typ NameValueCollection
        {
            rs.Write(boundarybytes, 0, boundarybytes.Length);
            string formitem = string.Format(formdataTemplate, key, nvc[key]);
            byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
            rs.Write(formitembytes, 0, formitembytes.Length);
        }
        rs.Write(boundarybytes, 0, boundarybytes.Length);
2.891 Beiträge seit 2004
vor 13 Jahren

habe mir folgendes Programmiert

Die WebClient.UploadFile-Methode (System.Net) kennst du?

Wenn du einfach ein "uid=2asdasd" mitschicken möchtest, wäre das Einfachste, das einfach mit in die URL zu kodieren.

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 13 Jahren

ja, aber geht das dann nicht als GET mit, wenn ich das mit ? dahinter schicke

2.891 Beiträge seit 2004
vor 13 Jahren

ja, aber geht das dann nicht als GET mit, wenn ich das mit ? dahinter schicke

Nein. Du hast für einen Request nur ein einziges HTTP-Verb. Und das ist in deinem Fall POST.

S
178 Beiträge seit 2009
vor 13 Jahren

ja, aber geht das dann nicht als GET mit, wenn ich das mit ? dahinter schicke

Nein, weil du ja als Methode POST angibst, zur Unterscheidung lies vielleicht mal:

Unterschiede GET/POST (englisch)

Aber noch ein Hinweis:

Die WebClient.UploadFile-Methode (System.Net) kennst du?

Bei einfachen Dingen geht das, aber nicht bei komplexeren Forms mit mehreren Feldern.
Da hab ich schon mal mit rumexperimentiert.

2.891 Beiträge seit 2004
vor 13 Jahren

Bei einfachen Dingen geht das, aber nicht bei komplexeren Forms mit mehreren Feldern.

Es soll ja auch nur ein Bild hochgeladen werden.