Вопрос

















Я пытаюсь загрузить фото в 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";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top