2

i've searched about how to upload files to websites using console applications and i reached some ways, seems like the correct way, but i'm not having sucess with this. So i need some help!

First, the solution that i've founded follows:

class Program
{
    static void Main(string[] args)
    {
        //Program.Test1();
        Program.Test3();
        Console.ReadLine();
    }

    public static void Test3()
    {
        //Set this to dont get an Invalid Request Exception
        System.Net.ServicePointManager.Expect100Continue = false;

        //Set a real page for this test
        string url = "http://www.toledorocket.com/perftest/uploadtest/fileselect.asp";
        string[] files = { "C:\\Documents and Settings\\wkurten\\Desktop\\fogao.txt" }; //Put some real file
        NameValueCollection nvc = new NameValueCollection();
        nvc.Add("FILE1", "fogao.txt");

        string boundary = "----------------------------" +
        DateTime.Now.Ticks.ToString("x");

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

        //Is you have an connection with proxy, uncomment and set the values bellow:
        /*NetworkCredential localNetworkCredential = new NetworkCredential("user", "pass", "domain");
        httpWebRequest2.Proxy = new WebProxy("server:port", false);
        httpWebRequest2.Proxy.Credentials = localNetworkCredential;*/

        Stream memStream = new System.IO.MemoryStream();

        byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
        boundary + "\r\n");

        string formdataTemplate = "\r\n--" + boundary +
        "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";

        foreach (string key in nvc.Keys)
        {
            string formitem = string.Format(formdataTemplate, key, nvc[key]);
            byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
            memStream.Write(formitembytes, 0, formitembytes.Length);
        }

        memStream.Write(boundarybytes, 0, boundarybytes.Length);

        string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";

        for (int i = 0; i < files.Length; i++)
        {
            string header = string.Format(headerTemplate, "file" + i, files[i]);
            //string header = string.Format(headerTemplate, "uplTheFile", files[i]);

            byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);

            memStream.Write(headerbytes, 0, headerbytes.Length);

            FileStream fileStream = new FileStream(files[i], FileMode.Open,
            FileAccess.Read);
            byte[] buffer = new byte[1024];

            int bytesRead = 0;

            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                memStream.Write(buffer, 0, bytesRead);

            }

            memStream.Write(boundarybytes, 0, boundarybytes.Length);

            fileStream.Close();
        }

        httpWebRequest2.ContentLength = memStream.Length;

        Stream requestStream = httpWebRequest2.GetRequestStream();

        memStream.Position = 0;
        byte[] tempBuffer = new byte[memStream.Length];
        memStream.Read(tempBuffer, 0, tempBuffer.Length);
        memStream.Close();
        requestStream.Write(tempBuffer, 0, tempBuffer.Length);
        requestStream.Close();

        //Gets the response
        WebResponse webResponse2 = httpWebRequest2.GetResponse();

        Stream stream2 = webResponse2.GetResponseStream();
        StreamReader reader2 = new StreamReader(stream2);

        //Retrieve the html from response
        string htmlResponse = reader2.ReadToEnd();

        webResponse2.Close();
        httpWebRequest2 = null;
        webResponse2 = null;
    }

}

The problem that i'm having with this solution is that when i upload a file and retrieves the WebResponse, the page that i'm getting is the page with the upload form and not the page that appears after upload, that page with the success message.

On the page that i'm trying to upload the file i have this html/form:

<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadstatus.asp">
  <INPUT TYPE="FILE" SIZE="40" NAME="FILE1"> <INPUT TYPE=SUBMIT VALUE="Upload!">
</FORM>

When i run my code i just get this same form every time, seems like i'm never posting anything... anyone have an idea of what is happening?

0 Answers0