1

如何从 Windows Phone 正确上传图像,其中图像源是 PhotoChooserTask 的 PhotoResult?我为此使用 RestSharp,但它只会将一大堆零上传到我的服务器。

这是我遇到麻烦的代码部分:

using (MemoryStream memo = new MemoryStream())
{
    appGlobal.appData.selectedPhoto.ChosenPhoto.CopyTo(memo);

    byte[] imgArray = new byte[appGlobal.appData.selectedPhoto.ChosenPhoto.Length];
    memo.Read(imgArray, 0, imgArray.Length);

    request.AddFile("image", imgArray, "image", "image/jpeg");
}

我似乎无法弄清楚我应该如何将 PhotoResult.ChosenPhoto(这是一个 PhotoStream)转换为字节数组。

有什么想法吗?

4

2 回答 2

1

好的,我发现了问题所在。似乎当您从选择器任务中获取 PhotoResult 时,让它成为 PhotoChooserTask 或 CameraCaptureTask,流的位置未设置为 0。因此您必须在从中读取字节之前手动设置它。这是我的问题的固定代码:

byte[] imgArray = new byte[(int)appGlobal.appData.selectedPhoto.ChosenPhoto.Length];
appGlobal.appData.selectedPhoto.ChosenPhoto.Position = 0;
appGlobal.appData.selectedPhoto.ChosenPhoto.Read(imgArray, 0, (int)appGlobal.appData.selectedPhoto.ChosenPhoto.Length);
appGlobal.appData.selectedPhoto.ChosenPhoto.Seek(0, SeekOrigin.Begin);

request.AddFile("image", imgArray, "image");

也感谢 KooKiz 的帮助。:)

于 2013-08-02T09:56:20.897 回答
0

您在代码中混合了两种方法。

要么直接读取字节数组中流的内容:

byte[] imgArray = new byte[appGlobal.appData.selectedPhoto.ChosenPhoto.Length];
appGlobal.appData.selectedPhoto.ChosenPhoto.Read(imgArray, 0, imgArray.Length);

request.AddFile("image", imgArray, "image", "image/jpeg");

或者将流复制到 MemoryStream 然后使用以下ToArray方法:

using (MemoryStream memo = new MemoryStream())
{
    appGlobal.appData.selectedPhoto.ChosenPhoto.CopyTo(memo);

    byte[] imgArray = memo.ToArray();

    request.AddFile("image", imgArray, "image", "image/jpeg");
}
于 2013-08-01T13:13:10.750 回答