.NET 4.x Загрузка фото Вконтакте C# с авторизацией через oauth+api.vkontakte
Формулировка задачи:
Всем привет, прошу помощи, т.к. мозги уже кипят, и какие маны курить уже не знаю.
Есть внешнее desktop приложение на C# с авторизацией через oauth, нужно залить фото в созданный альбом.
Действую по рекомендованной здесь http://vkontakte.ru/developers.php?o...F2%E0%EA%F2%E5 схеме.
1. Выполняю photos.getUploadServer, получаю upload_url
2. формирую POST запрос на полученный адрес, и здесь спотыкаюсь, всегда в ответе возвращается пустое поле "photos_list": "", что делает невозможным переход к третьему шагу (photos.save)
На втором шаге считываю изображение test.jpg в массив byte[] album_pic и ставлю его в POST
Что делаю не так? Вот код:
private string VkUploadPhoto() { try { WebResponse result = null; Stream ReceiveStream = null; StreamReader sr = null; System.Net.WebRequest reqPOST = System.Net.WebRequest.Create(upload_url); reqPOST.Method = "POST"; // Устанавливаем метод передачи данных в POST reqPOST.ContentType = "multipart/form-data"; // указываем тип контента byte[] sentData = Encoding.GetEncoding("utf-8").GetBytes("&file1=" + album_pic); reqPOST.ContentLength = sentData.Length; System.IO.Stream sendStream = reqPOST.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); // считываем результат работы result = reqPOST.GetResponse(); ReceiveStream = result.GetResponseStream(); Encoding encode = Encoding.GetEncoding("utf-8"); sr = new StreamReader(ReceiveStream, encode); Char[] read = new Char[256]; int count = sr.Read(read, 0, 256); string strOut = ""; while (count > 0) { String str = new String(read, 0, count); strOut += str; count = sr.Read(read, 0, 256); } return strOut; } catch (Exception ex) { return ex.Message; } }
Решение задачи: «.NET 4.x Загрузка фото Вконтакте C# с авторизацией через oauth+api.vkontakte»
textual
Листинг программы
//string upload_url = "полученная строка в GetUploadUrl"; //byte[] pic = картинка (из файла или же перевод из Image HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(upload_url); Stream _stream; string _boundary = String.Format("--{0}", GetMD5()); string _templateFile = "--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n"; string _templateEnd = "--{0}--\r\n\r\n"; Request.Method = "POST"; Request.ContentType = String.Format("multipart/form-data; boundary={0}", _boundary); _stream = Request.GetRequestStream(); string FilePath = "test.jpg"; string FileType = "application/octet-stream"; string Name = "file1"; byte[] contentFile = Encoding.UTF8.GetBytes(String.Format(_templateFile, _boundary, Name, FilePath, FileType)); _stream.Write(contentFile, 0, contentFile.Length); _stream.Write(pic, 0, pic.Length); byte[] _lineFeed = Encoding.UTF8.GetBytes("\r\n"); _stream.Write(_lineFeed, 0, _lineFeed.Length); byte[] contentEnd = Encoding.UTF8.GetBytes(String.Format(_templateEnd, _boundary)); _stream.Write(contentEnd, 0, contentEnd.Length); HttpWebResponse webResponse = (HttpWebResponse)Request.GetResponse(); StreamReader read = new StreamReader(webResponse.GetResponseStream()); return read.ReadToEnd();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д