Сброс фото Windows Phone Photo Загрузить
-
14-11-2019 - |
Вопрос
Я пытаюсь загрузить фото в API для отдыха в приложении Windows Phone 7, используя Restsharp для моих Geta / Posts.
Параметры сообщения следующие:
<Сильное> фото : Фото, закодированная как multipart / form-data
photo_album_id : Идентификатор существующего фотоальбома, который может быть событием или группой АльбомЯ создал мою просьбу, но каждый раз, когда я верную
"{\"details\":\"missing photo parameter\",\"problem\":\"The API request is malformed\"}\n
Мой параметр фото выглядит следующим образом:
"------------------------------ 8cd9bfbafb3ca00 \ r \ ncontent-dating: form-data; name= \" Имя файла \ " ; filename="quefile.jpg \" \ r \ ncontent-type: image / jpg \ r \n\ r \n(какой-то двоичный мусор, указанный здесь) \ R \ N ------------- -------------------- 8cd9bfbafb3ca00 - "
Я не совсем уверен, если это проблема с тем, как я представляю двоичные данные для изображения (в настоящее время в моем фотозазненном событии, я прочитал содержимое e.cedphoto в байт [] и передавать это Метод помощника для создания данных формы) или если я просто не создаю форму правильно.
Я просто пытаюсь сделать это просто просто, тогда я могу рефакторировать, как только я узнаю, как все это работает.
.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; }
Решение
Hammock for Windows Phone makes this real simple.
You just add the file to the request using the AddFile
method and pass it the photo stream.
var request = new RestRequest("photo", WebMethod.Post);
request.AddParameter("photo_album_id", _album.album_id);
request.AddFile("photo", filename, e.ChosenPhoto);
Другие советы
Hum are you sure that your PostForm is correct ? The content-* params should be set in the headers of your POST and not in the body ?
var request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add(HttpRequestHeader.Authorization,"blabla");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";