.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();

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


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

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

15   голосов , оценка 4.067 из 5
Похожие ответы