2013-08-01 72 views
1

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

下面的代码部分我有trobule:

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(这是一个照片流)转换为字节数组。

有什么想法?

回答

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。 :)

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"); 
} 
+0

第一种方法上传一个文件,全0,但正确的大小。 第二种方法上传0字节。 :( – peaks