Avatar billede rbl Praktikant
15. september 2008 - 14:56 Der er 3 kommentarer og
1 løsning

Post'e fil + data til ekstern server

Hejsa

Jeg er ved at lave et system til uploading af billeder og små filmklip til en ekstern server. Jeg prøver mig frem med HttpWebRequest, men jeg kan ikke helt få det til at fungere.

Jeg har fundet flere eksempler, hvor de POST'er data i form af tekst, og jeg har også fundet et par eksempler hvor de POST'er en fil, men kan ikke rigtig få kombineret det, så der både er data i form af tekst samt en fil.

Her er koden for at post'e tekstværdier:

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string values = "&field1=" + value1 + "&field2=" + value2 + "&field3=" + value3 + "&doreply=yes";
       
request.ContentLength = values.Length;
System.IO.StreamWriter stOut = new System.IO.StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(values);
stOut.Close();

// Do the request to get the response
System.IO.StreamReader stIn = new System.IO.StreamReader(request.GetResponse().GetResponseStream());
string strResponse = stIn.ReadToEnd();
stIn.Close();

Hvordan får jeg tilføjet en fil til det request?

Pft.
Avatar billede arne_v Ekspert
15. september 2008 - 15:24 #1
Upload eksempel:

using System;
using System.IO;
using System.Net;

public class DataAndFileUpload
{
    private const string BOUNDARY = "ArneArne";
    public static void Main(string[] args)
    {
        upload("http://localhost:8080/test/xuploaddo.jsp", "test", "C:\\last.cpp");
    }
    public static void upload(string url, string description, string filename)
    {
        ServicePointManager.Expect100Continue = false; // to avoid .NET - Tomcat 5 bug
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        req.KeepAlive = false;
        req.ContentType = "multipart/form-data; boundary=" + BOUNDARY;
        StreamWriter post = new StreamWriter(req.GetRequestStream());
        post.WriteLine("--" + BOUNDARY);
        post.WriteLine("Content-Disposition: form-data; name=\"beskrivelse\"");
        post.WriteLine("");
        post.WriteLine(description);
        post.WriteLine("--" + BOUNDARY);
        post.WriteLine("Content-Disposition: form-data; name=\"fil\"; filename=\"" + filename + "\"");
        //post.WriteLine("Content-Type: text/plain");
        post.WriteLine("Content-type: application/octet-stream");
        post.WriteLine("Content-Transfer-Encoding: binary");
        post.WriteLine("");
        post.Flush();
        Stream binf = new FileStream(filename, FileMode.Open);
        int c;
        while((c = binf.ReadByte()) >= 0) {
            post.BaseStream.WriteByte((byte)c);
        }
        binf.Close();
        post.BaseStream.Flush();
        post.WriteLine("--" + BOUNDARY + "--");
        post.Close();
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Console.WriteLine(resp.StatusCode);
        resp.Close();
    }
}
Avatar billede rbl Praktikant
15. september 2008 - 15:35 #2
Tak for dit svar, det prøver jeg lige.
Det KAN egentlig bare være den første linie jeg mangler, da det er en Tomcat server :-)
Avatar billede rbl Praktikant
15. september 2008 - 15:51 #3
ja, nu er der lige pludselig hul igennem. Det var kun nogle få ting jeg manglede.
Tak for det.

Smid et svar, så får du pointene
Avatar billede arne_v Ekspert
15. september 2008 - 15:52 #4
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester