我正在尝试在Windows Phone 7应用程序中将照片上传到REST API,使用RETSHARP为我的Get / Posts。
后参数如下:

照片: 照片,编码为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类型:图像/ jpg \ r \n\ r \ n(这里列出的一些二进制垃圾)\ r \n----------- ----------------8CD9BFBAFB3CA00 - “

我不确定是否是我如何呈现图像的二进制数据的问题(当前在我的PhototaskCompleted事件中,我将E.cocheningPhoto的内容读取到一个字节[]并将其传递给辅助方法创建表单数据)或者我只是没有正确创建表单。

我只是想尽可能简单地做到这一点,然后我能重新推荐一旦我知道它是如何工作的。

 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