WindowsPhone 8 - 将图像上传到php页面

时间:2013-10-31 09:41:40

标签: php image windows-phone-8 upload

我已经搜索过很多关于如何将图像从windowsphonen 8应用程序上传到我的php页面(文件服务器)的不同教程 - 没有什么对我有用,所以我问你。

这是我将Stream转换为Base64的代码

    string PhotoStreamToBase64(Stream PhotoStream)
    {
        MemoryStream memoryStream = new MemoryStream();
        PhotoStream.CopyTo(memoryStream);
        byte[] result = memoryStream.ToArray();

        string base64img = System.Convert.ToBase64String(result);
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < base64img.Length; i += 32766)
        {
            sb.Append(Uri.EscapeDataString(base64img.Substring(i, Math.Min(32766, base64img.Length - i))));
        }

        return sb.ToString();
    }

我使用photoChooserTask捕获图像(这很好,但我没有得到一个我可以用于其他方法的流)

    private void photoChooserTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            MessageBox.Show(e.ChosenPhoto.Length.ToString());

            //Code to display the photo on the page in an image control named myImage.
            System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
            bmp.SetSource(e.ChosenPhoto);
            MyImage.Source = bmp;
        }
    }

要上传图片,我试过这个:

    public void UploadImageAsync(Stream PhotoStream)
    {
        try
        {
            WebClient w = new WebClient();
            w.Headers["Content-type"] = "application/x-www-form-urlencoded";

            string data = "id=1" +
                    "&_fake_status=200" +
                    "&type=base64" +
                    "&image=" + PhotoStreamToBase64(PhotoStream);

            w.UploadStringAsync(new Uri("http://myurl.de/php/app/changeimg.php", UriKind.Absolute), "POST", data);

        }
        catch (Exception ex)
        {
        }
    }

最后一部分是我的php文件

    function base64_to_image( $imageData, $outputfile ) {
    $ifp = fopen( $outputfile, "wb" );
    fwrite( $ifp, base64_decode( $imageData ) );
    fclose( $ifp );
    return( $outputfile );
    }       

    if (isset($_POST['image'])) {
    base64_to_jpeg($_POST['image'], "test".$_GET['id'].".jpg");
$file = 'people.txt';

     $person = "Win";

    file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
     }
    else
{
    die("no image data found");
$file = 'people.txt';

     $person = "Fail";

    file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
}

我从不同的来源获得了所有这些代码片段,并以某种方式认为这是我能找到的最好的“想法”。有没有人可能有我的问题的示例代码?我是Windowsphone开发人员的新手,我需要一些严肃的帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

首先,不要使用WebClient类,使用HttpClient及其方法PostAsync,然后完全依赖于您的Web API实现