Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alemex

[Resolvido] Upload de arquivo em WebSite via Console App

Recommended Posts

Olá pessoal, estou tendo alguns problemas para criar uma console application que faz o upload de um arquivo em um site da web, preciso simular um POST na página mas nao estou tendo sucesso, já pesquisei bastante e achei uma solução que me parece correta, adaptei ela ao meu caso, porém nao está funcionando.

 

No codigo abaixo segue uma página web real para a qual eu estou tentando fazer o upload.

 

Segue abaixo código que eu estou utilizando:

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;
   }

}

 

Quando eu recupero o WebResponse e Converto para o HTML, eu sempre recupero o HTML da página de envio do arquivo, e nunca a página de confirmação de que o arquivo foi enviado, é como se o POST que eu estou fazendo não esteja sendo executado...

 

Abaixo a estrutura HTML da pagina com o FORM:

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

 

Será que tem algo relacionado com o atributo ACTION do form?

 

Agradeço des de já a ajuda! Obrigado.

 

Criei um post no StackOverflow tbm.. caso alguem queira acessar: Clique aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.