我正在尝试使用 RestSharp 将照片上传到 Windows Phone 7 应用程序中的 REST api 进行获取/发布。
post参数如下:
photo:
照片,编码为多部分/表单数据
照片_相册_id:
现有相册的标识符,可以是一个事件或组
专辑
我已经创建了我的请求,但每次我回来时"{\"details\":\"missing photo parameter\",\"problem\":\"The API request is malformed\"}\n
我的照片参数如下所示:
“--------------------------8cd9bfbafb3ca00\r\n内容处置:表单数据;名称=\“文件名\”;文件名= \"somefile.jpg\"\r\n内容类型:image/jpg\r\n\r\n(此处列出了一些二进制垃圾)\r\n-------------- ---------------8cd9bfbafb3ca00--"
我不太确定我如何呈现图像的二进制数据是否有问题(当前在我的 PhotoTaskCompleted 事件中,我将 e.ChosenPhoto 的内容读入 byte[] 并将其传递给辅助方法创建表单数据)或者如果我没有正确创建表单。
我只是想尽可能简单地做到这一点,然后一旦我知道它是如何工作的,我就可以重构。
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;
}
适用于 Windows Phone 的 Hammock 让这变得非常简单。
您只需使用以下命令将文件添加到请求中即可AddFile
方法并将照片流传递给它。
var request = new RestRequest("photo", WebMethod.Post);
request.AddParameter("photo_album_id", _album.album_id);
request.AddFile("photo", filename, e.ChosenPhoto);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)