web-dev-qa-db-ja.com

HttpClientを使用して画像をアップロードする

HttpClientを使用してファイルをphpスクリプトにアップロードし、Windows Phone8.1アプリケーションのサーバーに保存したいと思います。

これが私が取得したC#コードです この投稿

private async Task<string> GetRawDataFromServer(byte[] data)
{
    //Debug.WriteLine("byte[] data length:" + Convert.ToBase64String(data).Length);
    var requestContent = new MultipartFormDataContent();
    //    here you can specify boundary if you need---^
    var imageContent = new ByteArrayContent(data);
    imageContent.Headers.ContentType =
        MediaTypeHeaderValue.Parse("image/jpeg");

    requestContent.Add(imageContent, "image", "image.jpg");
    using (var client = new HttpClient())
     {

         client.BaseAddress = new Uri("http://www.x.net/");

        var result = client.PostAsync("test/fileupload.php", requestContent).Result;

         return result.Content.ReadAsStringAsync().Result;

     }
}

そして、このコードを使用して、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'], "image.jpg");
}
else
    die("no image data found");
?>

しかし、IS画像ファイルがありますが、常に「データが見つかりません」という結果が得られます。POSTパラメーターとして渡すのに何か問題がありますか?

7
Elektropepi

何時間も調査した後、ドラフトから再開する必要があることになりました。次のC#コードを使用してHtmlフォームのアップロードをシミュレートします。

  private async Task<string> UploadImage(StorageFile file)
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://your.url.com/");
            MultipartFormDataContent form = new MultipartFormDataContent();
            HttpContent content = new StringContent("fileToUpload");
            form.Add(content, "fileToUpload");
            var stream = await file.OpenStreamForReadAsync();
            content = new StreamContent(stream);
            content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
            {
                Name = "fileToUpload",
                FileName = file.Name
            };
            form.Add(content);
            var response = await client.PostAsync("upload.php", form);
            return response.Content.ReadAsStringAsync().Result;
        }

そして、データを受信するための私のphpファイルは次のようになります。

<?php 
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['fileToUpload']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);
?>

今では正常に機能し、誰かが私のコードを再利用できることを願っています。

24
Elektropepi