Я пытаюсь загрузить фотографию в API REST в приложении для Windows Phone 7, используя RestSharp для моих запросов / сообщений.
Параметры записи следующие:
фотография : фотография, закодированная как multipart / form-data
photo_album_id : идентификатор существующего фотоальбома, который может быть альбомом события или группы
Я создал свой запрос, но каждый раз, когда я возвращаюсь "{\"details\":\"missing photo parameter\",\"problem\":\"The API request is malformed\"}\n
Мой параметр фотографии выглядит так:
"--------------------------- 8cd9bfbafb3ca00 \ r \ nContent-Disposition: form-data; name = \ "filename \"; filename = \ "somefile.jpg \" \r \ nContent-Type: image / jpg \ r \ n \ r \ n (здесь указан некоторый двоичный мусор) \ r \ n ----------------------------- 8cd9bfbafb3ca00 - "
Я не совсем уверен, если это проблема с тем, как я представляю двоичные данные для изображения (в настоящее время в моем событии PhotoTaskCompleted япрочитайте содержимое e.ChosenPhoto в байт [] и передайте его вспомогательному методу для создания данных формы) или если я просто не создаю форму правильно.
Я просто пытаюсь сделать это как можно более простым, тогда я могу выполнить рефакторинг, как только узнаю, как все это работает.
void ImageObtained(object sender, PhotoResult e)
{
var photo = ReadToEnd(e.ChosenPhoto);
var form = PostForm(photo);
var request = new RequestWrapper("photo", Method.POST);
request.AddParameter("photo_album_id", _album.album_id);
request.AddParameter("photo", form);
request.Client.ExecuteAsync<object>(request, (response) =>
{
var s = response.Data;
});
}
private string CreateBoundary()
{
return "---------------------------" + DateTime.Now.Ticks.ToString("x");
}
private string PostForm(byte[] data)
{
string boundary = CreateBoundary();
StringBuilder post = new StringBuilder();
post.Append(boundary);
post.Append("\r\n");
post.Append("Content-Disposition: form-data; name=\"filename\"; filename=\"somefile.jpg\"");
post.Append("\r\n");
post.Append("Content-Type: image/jpg");
post.Append("\r\n\r\n");
post.Append(ConvertBytesToString(data));
post.Append("\r\n");
post.Append("--");
post.Append(boundary);
post.Append("--");
return post.ToString();
}
public static string ConvertBytesToString(byte[] bytes)
{
string output = String.Empty;
MemoryStream stream = new MemoryStream(bytes);
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream))
{
output = reader.ReadToEnd();
}
return output;
}