4

写真ライブラリ(WP7)から写真をアップロードし、サーバー上のフォルダーに保存しようとしています。

サーバーでは、PHPを使用してPOSTメソッドを使用してファイルを受信して​​います。PHPコードは次のとおりです。

<?php
$uploads_dir = 'files/'; //Directory to save the file that comes from client application.
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["file"]["tmp_name"];
    $name = $_FILES["file"]["name"];
    move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
?>

私はすでにいくつかのアプローチを試しましたが、それらはすべて失敗しているようです。Client.UploadFileメソッドを使用してWindowsフォームアプリケーションでこのジョブを既に実行しましたが、WindowsPhoneアプリケーションでは使用できないようです。

httpwebrequestが役立つと思いますよね?

これはこれまでの私のC#コードです:

public partial class SamplePage : PhoneApplicationPage
    {
        public SamplePage()
        {
            InitializeComponent();
        }

        PhotoChooserTask selectphoto = null;

        private void SampleBtn_Click(object sender, RoutedEventArgs e)
        {
            selectphoto = new PhotoChooserTask();
            selectphoto.Completed += new EventHandler<PhotoResult>(selectphoto_Completed);
            selectphoto.Show();
        }

        void selectphoto_Completed(object sender, PhotoResult e)
        {
            if (e.TaskResult == TaskResult.OK)
            {
                BinaryReader reader = new BinaryReader(e.ChosenPhoto);
                image1.Source = new BitmapImage(new Uri(e.OriginalFileName));
                txtBX.Text = e.OriginalFileName;
            }
        }
    }

画像をバイト文字列に変換する必要があることをどこかで読んだのですが、よくわかりません。しかし、私を助けてください。

よろしくお願いします。

4

1 に答える 1

4

イメージを base64 に変換し (System.Convert を参照)、POST 経由で転送します。

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://mydomain.cc/saveimage.php");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            string postData = String.Format("image={0}", myBase64EncodedImage);   

            // Getting the request stream.
            request.BeginGetRequestStream
                (result =>
                {
                    // Sending the request.
                    using (var requestStream = request.EndGetRequestStream(result))
                    {
                        using (StreamWriter writer = new StreamWriter(requestStream))
                        {
                            writer.Write(postData);
                            writer.Flush();
                        }
                    }

                    // Getting the response.
                    request.BeginGetResponse(responseResult =>
                    {
                        var webResponse = request.EndGetResponse(responseResult);
                        using (var responseStream = webResponse.GetResponseStream())
                        {
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                string srresult = streamReader.ReadToEnd();
                            }
                        }
                    }, null);
                }, null);
        }

saveimage.php は次のようになります。

<?
function base64_to_image( $imageData, $outputfile ) {
    /* encode & write data (binary) */
    $ifp = fopen( $outputfile, "wb" );
    fwrite( $ifp, base64_decode( $imageData ) );
    fclose( $ifp );
    /* return output filename */
    return( $outputfile );
}       

if (isset($_POST['image'])) {
    base64_to_jpeg($_POST['image'], "my_path_to_store_images.jpg");
}
else
    die("no image data found");
?>

注: コードはテストしていません。タイプミスやその他のエラーがある可能性があります。これは、POST を使用して画像を転送する方法を説明するためのものです。

あなたのコメントへの返信として編集してください:手元にbase64にエンコードするコードはありませんが、C#でbase64でエンコードされた画像をデコードする方法は次のとおりです:

byte[] image = Convert.FromBase64String(str);
于 2013-03-19T21:39:54.697 に答える