2010-09-18 9 views
0

J'envoie actuellement des données d'image sous la forme d'un tableau d'octets. Cependant, je souhaite l'envoyer en tant que chaîne ASCII. Comment puis-je envoyer une chaîne ASCII du client au serveur en utilisant HTTP POST dans C#?Envoyer une chaîne ASCII à l'aide de HTTP Post

HttpWebRequest webRequest = null; 
    webRequest = (HttpWebRequest)HttpWebRequest.Create("http://192.168.1.2/"); 
    webRequest.ContentType = "application/x-www-form-urlencoded";            
    webRequest.Method = "POST";  

//Assume here, I got the ascii string from image using ImageToBase64() function. 

byte[] buffer = encoding.GetBytes(myString)); //assume myString is an ASCII string 

    // Set content length of our data 
    webRequest.ContentLength = buffer.Length; 

    webStream = webRequest.GetRequestStream(); 
    webStream.Write(buffer, 0, buffer.Length); //This is the only way I know how to send data -using byte array "buffer". But i wan to send data over as ASCII string "myString". How? 
    webStream.Close(); 

    //I used this function to turn an image into ASCII string to be sent 
    public string ImageToBase64(Image image, 
     System.Drawing.Imaging.ImageFormat format) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
     // Convert Image to byte[] 
     image.Save(ms, format); 
     byte[] imageBytes = ms.ToArray(); 

     // Convert byte[] to Base64 String 
     string base64String = Convert.ToBase64String(imageBytes); 
     return base64String; 
     } 
    } 

Répondre

0

Je propose le creusement de fossés HttpWebRequest en faveur de WebClient. En outre, si vous envoyez en utilisant le content-type de application/x-www-form-urlencoded, le serveur s'attend à ce que les données publiées correspondent au format key1=value1&key2=value2.

// sending image to server as base 64 string 
string imageBase64String = "YTM0NZomIzI2OTsmIzM0NTueYQ..."; 
using (WebClient client = new WebClient()) 
{ 
    var values = new NameValueCollection(); 
    values.Add("image", imageBase64String); 
    client.UploadValues("http://192.168.1.2/", values); 
} 

Même chose, mais en utilisant WebHttpRequest

string imageBase64String = "YTM0NZomIzI2OTsmIzM0NTueYQ..."; 
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://192.168.1.2/"); 
webRequest.ContentType = "application/x-www-form-urlencoded"; 
webRequest.Method = "POST"; 
string formPostString = "image=" + HttpUtility.UrlEncode(imageBase64String); 
byte[] buffer = ASCIIEncoding.ASCII.GetBytes(formPostString); 
webRequest.ContentLength = buffer.Length; 
using (Stream webStream = webRequest.GetRequestStream()) 
{ 
    webStream.Write(buffer, 0, buffer.Length); 
} 

Ensuite, vous pouvez manipuler l'image envoyée sur le côté serveur en utilisant l'objet HttpRequest.

string imageBase64String = HttpContext.Current.Request.Form["image"]; 
+2

[WebClient.UploadValues] (http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx) est encore mieux pour ' "application/x-www-form-urlencoded"' charge utile car il définit l'en-tête et fait l'encodage de l'URL pour vous. – dtb

+0

@dtb: Bon conseil à savoir. Merci. – tidwall

+0

La chose est que j'ai besoin d'obtenir une réponse du serveur. Par conséquent, j'ai utilisé WebReuqest. J'ai reçu l'instruction d'utiliser HTTP Post et d'envoyer une chaîne ASCII en utilisant HTTP Post, alors comment cela peut-il être fait? Que devrait être le "ContentType"? Je ne suis pas familier avec ce qu'est réellement ContentType donc je mets simplement "application/x-www-form-urlencoded" – Robogal

Questions connexes