2014-12-11 4 views
5

HttpClient를 사용하여 파일을 PHP 스크립트에 업로드하여 Windows Phone 8.1 응용 프로그램의 서버에 저장하려고합니다.HttpClient를 사용하여 이미지 업로드

여기는 this post에서 얻은 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"); 
?> 

에서 데이터를 검색하지만 항상 얻을 결과는 이미지 파일이 있지만 "데이터가 발견"입니다. POST 매개 변수로 잘못 전달하는 중입니까?

+0

비동기 메소드에'.Result'를 사용하는 대신, 대신에'await'해야합니다 (컴파일러가'async'를 잘못 사용하고 있다고 경고해야합니다). 유선을 통해 전송되는 것을 확인하기 위해 네트워크 추적을 수행 했습니까? –

+0

아니, 솔직히 말해서 어떻게해야할지 모르겠다. – Elektropepi

답변

19

연구 시간이 지나면 내가 초안에서 다시 시작해야한다는 결론에 도달했습니다.

<?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); 
?> 

지금이 정상적으로 작동하고 나는 누군가가 할 수있는 희망 다음 follwing을 같이

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 파일 데이터가 보인다 수신 : 나는 다음과 같은 C# 코드와 HTML 양식 업로드를 시뮬레이션 내 코드를 재사용하십시오.

+0

도와 주셔서 감사합니다. –

+0

고마워 ..... .....! –

+0

client.BaseAddress = new Uri ("http://your.url.com/")의 http://your.url.com/과 var 응답 = await 클라이언트의 upload.php의 차이점은 무엇입니까? "upload.php", form); ? – iamatsundere181

관련 문제