来自e.ChosenPhoto的Base64显然已损坏

时间:2013-04-21 15:43:33

标签: c# windows-phone-7 imgur

            //convert photo to baos
            var memoryStream = new System.IO.MemoryStream();
            e.ChosenPhoto.CopyTo(memoryStream);
            //string baos = memoryStream.ToString();
            byte[] result = memoryStream.ToArray();
            String base64 = System.Convert.ToBase64String(result);
            String post_data = "&image=" + base64;
            ...
            wc.UploadStringAsync(imgur_api,"POST",post_data);  

我正在使用此代码使用WebClient将图像上传到Imgur API v3。所选图像是Windows Phone 7.1模拟器提供的7张照片之一,或模拟的相机图像。当我尝试加载图像时,它们是一个灰色腐败的混乱。我是否正确生成base64和/或是否需要在创建byte []和base64之前先渲染图片的位图?

提前致谢!

2 个答案:

答案 0 :(得分:3)

使用Uri.EscapeDataString之类的内容来转义数据,以便不解释特殊的URL字符。

答案 1 :(得分:0)

我用这个

 private void PhotoChooserTaskCompleted(object sender, PhotoResult e)
    {
        if (e.TaskResult != TaskResult.OK) return;
        var bimg = new BitmapImage();
        bimg.SetSource(e.ChosenPhoto);
        var sbytedata = ReadToEnd(e.ChosenPhoto);
    }

 public static byte[] ReadToEnd(System.IO.Stream stream)
    {
        long originalPosition = stream.Position;
        stream.Position = 0;

        try
        {
            byte[] readBuffer = new byte[4096];

            int totalBytesRead = 0;
            int bytesRead;

            while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
            {
                totalBytesRead += bytesRead;

                if (totalBytesRead == readBuffer.Length)
                {
                    int nextByte = stream.ReadByte();
                    if (nextByte != -1)
                    {
                        byte[] temp = new byte[readBuffer.Length * 2];
                        Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
                        Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
                        readBuffer = temp;
                        totalBytesRead++;
                    }
                }
            }

            byte[] buffer = readBuffer;
            if (readBuffer.Length != totalBytesRead)
            {
                buffer = new byte[totalBytesRead];
                Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
            }
            return buffer;
        }
        finally
        {
            stream.Position = originalPosition;
        }
    }

byte[]上传到服务器。希望它有所帮助