POST загрузка изображения на сервер VK - C#

Узнай цену своей работы

Формулировка задачи:

Не получается передать изображение на сервер VK (Windows 8). В ответ от сервера я получаю пустую строку photo_list[]. Проблема в загрузке изображения, но какая именно не знаю. Код:
Листинг программы
  1. private async void Button_Click(object sender, RoutedEventArgs e)
  2. {
  3. string oauthUrl = "http://cs319216.vk.com/upload.php?act=do_add&mid=2314852&aid=169819278&gid=37273781&hash=82c465709a9b754e44ba2b4a4c27426a&rhash=235249149115419e40ada041ab7e2037&swfupload=1&api=1&save_big=1";
  4. HttpClient theAuthClient = new HttpClient();
  5. HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, oauthUrl);
  6. StorageFolder storageFolder = KnownFolders.PicturesLibrary;
  7. StorageFile sf = await storageFolder.GetFileAsync("ss.png");
  8. IBuffer buffer = await FileIO.ReadBufferAsync(sf);
  9. byte[] fileData = buffer.ToArray();
  10. Encoding encoding = Encoding.GetEncoding("Windows-1252");
  11. string text = encoding.GetString(fileData, 0, fileData.Length);
  12. string content = "file1=" + text + "";
  13. txt.Text = content;
  14. request.Method = HttpMethod.Post;
  15. request.Content = new StreamContent(new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)));
  16. request.Content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
  17. try
  18. {
  19. HttpResponseMessage response = await theAuthClient.SendAsync(request);
  20. handleResponse(response);
  21. }
  22. catch (HttpRequestException hre)
  23. {
  24. }
  25. }
  26. public async void handleResponse(HttpResponseMessage response)
  27. {
  28. string content = await response.Content.ReadAsStringAsync();
  29. Account account = JsonConvert.DeserializeObject<Account>(content);
  30. if (content != null)
  31. {
  32. }
  33. }

Решение задачи: «POST загрузка изображения на сервер VK»

textual
Листинг программы
  1. Код загрузки фотографии на сервер:
  2.  
  3.  
  4.  
  5. //ЗАГРУЗКА ФОТОГРАФИИ
  6.             //получение адреса сервера для загрузки фотографии
  7.             System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  8.             System.Net.WebRequest post_request2 = System.Net.WebRequest.Create("https://api.vkontakte.ru/method/photos.getWallUploadServer?gid=100669061&access_token=" + textBox3.Text.Trim());
  9.             System.Net.WebResponse post_request_response2 = post_request2.GetResponse();
  10.             System.IO.Stream post_request_stream2 = post_request_response2.GetResponseStream();
  11.             System.IO.StreamReader post_request_stream_reader2 = new System.IO.StreamReader(post_request_stream2);
  12.             string post_request_answer2 = post_request_stream_reader2.ReadToEnd();
  13.             string[] words_empty = post_request_answer2.Split('"');
  14.             string s = words_empty[5];
  15.                        
  16.             s = s.Replace("\\/","/");
  17.             s = s.Replace("\\/","/");
  18.             s = s.Replace("\\/","/");
  19.  
  20.             textBox6.Text = s;
  21.  
  22.  
  23.             //отправка файла на полученый сервер
  24.             NameValueCollection nvc = new NameValueCollection();
  25.             //nvc.Add("user", "user");
  26.             //nvc.Add("passwd", "passwd");
  27.             string s9;
  28.             s9 = HttpUploadFile(s, @"C:\file_1.jpg", "photo", "image/jpeg", nvc);
  29.  
  30.             textBox6.Text = s9;
  31.  
  32.             char[] delimiterChars = { ':', ',' };
  33.             string[] parameters = s9.Split(delimiterChars);
  34.             string server = parameters[1];
  35.  
  36.             char[] delimiterChars2={':'};
  37.             string[] parameters2 = s9.Split(delimiterChars2);
  38.             string hash = parameters2[7];
  39.            
  40.             char[] delimiterChars3 = { '"' };
  41.             string[] parameters3 = hash.Split(delimiterChars3);
  42.             hash = parameters3[1];
  43.  
  44.             string photo = s9.Substring(s9.IndexOf("photo")+8, s9.IndexOf("hash") - s9.IndexOf("photo")-11);
  45.  
  46.             photo = photo.Replace("\\\"", "\"");
  47.  
  48.            
  49.  
  50.             //сохранение фотографии на сервере
  51.             string url3 = "https://api.vk.com/method/photos.saveWallPhoto?server=" + server + "&photo=" + HttpUtility.UrlEncode(photo) + "&hash=" + hash + "&access_token=" + textBox3.Text.Trim();
  52.             textBox6.Text = textBox6.Text + " ---------- " + url3;
  53.            
  54.             System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  55.             System.Net.WebRequest post_request3 = System.Net.WebRequest.Create(url3);
  56.             System.Net.WebResponse post_request_response3 = post_request3.GetResponse();
  57.             System.IO.Stream post_request_stream3 = post_request_response3.GetResponseStream();
  58.             System.IO.StreamReader post_request_stream_reader3 = new System.IO.StreamReader(post_request_stream3);
  59.             string post_request_answer3 = post_request_stream_reader3.ReadToEnd();
  60.  
  61.             textBox6.Text = textBox6.Text + " ---------- " + post_request_answer3;
  62.  
  63.  
  64.  
  65.  
  66. Код функции HttpUploadFile:
  67.  
  68.  
  69.  
  70.         public static string HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc)
  71.         {
  72.             Console.WriteLine(string.Format("Uploading {0} to {1}", file, url));
  73.             string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  74.             byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  75.  
  76.             HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  77.             //wr.ContentType = "multipart/form-data; boundary=" + boundary;
  78.             wr.ContentType = "multipart/form-data; boundary=" + boundary;
  79.             wr.Method = "POST";
  80.             wr.KeepAlive = true;
  81.             wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  82.  
  83.  
  84.            
  85.  
  86.  
  87.             Stream rs = wr.GetRequestStream();
  88.  
  89.             string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
  90.             foreach (string key in nvc.Keys)
  91.             {
  92.                 rs.Write(boundarybytes, 0, boundarybytes.Length);
  93.                 string formitem = string.Format(formdataTemplate, key, nvc[key]);
  94.                 byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  95.                 rs.Write(formitembytes, 0, formitembytes.Length);
  96.             }
  97.             rs.Write(boundarybytes, 0, boundarybytes.Length);
  98.  
  99.             string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
  100.             string header = string.Format(headerTemplate, paramName, file, contentType);
  101.             byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  102.             rs.Write(headerbytes, 0, headerbytes.Length);
  103.  
  104.             FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
  105.             byte[] buffer = new byte[4096];
  106.             int bytesRead = 0;
  107.             while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  108.             {
  109.                 rs.Write(buffer, 0, bytesRead);
  110.             }
  111.             fileStream.Close();
  112.  
  113.             byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  114.             rs.Write(trailer, 0, trailer.Length);
  115.             rs.Close();
  116.  
  117.             WebResponse wresp = null;
  118.             try
  119.             {
  120.                 wresp = wr.GetResponse();
  121.                 Stream stream2 = wresp.GetResponseStream();
  122.                 StreamReader reader2 = new StreamReader(stream2);
  123.  
  124.                 //Form Form1 = new Form1();
  125.  
  126.                 //Form
  127.  
  128.                 //textBox6.Text = reader2.ReadToEnd();
  129.  
  130.  
  131.                 //MessageBox.Show(s3);
  132.  
  133.                 //Console.WriteLine(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd()));
  134.  
  135.  
  136.                 string s3 = reader2.ReadToEnd();
  137.  
  138.                 return s3;
  139.  
  140.            
  141.            
  142.             }
  143.             catch (Exception ex)
  144.             {
  145.                 Console.WriteLine("Error uploading file", ex);
  146.                 if (wresp != null)
  147.                 {
  148.                     wresp.Close();
  149.                     wresp = null;
  150.                 }
  151.  
  152.  
  153.                 wresp = wr.GetResponse();
  154.                 Stream stream2 = wresp.GetResponseStream();
  155.                 StreamReader reader2 = new StreamReader(stream2);
  156.  
  157.  
  158.  
  159.                 string s3 = reader2.ReadToEnd();
  160.  
  161.                 return s3;
  162.  
  163.  
  164.             }
  165.             finally
  166.             {
  167.                 wr = null;
  168.             }
  169.  
  170.  
  171.  
  172.        
  173.        
  174.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут