重置Windows手机照片上传
-
14-11-2019 - |
题
我正在尝试在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";