2016-06-05 3 views
1

Android 애플리케이션에서 Base64로 인코딩 된 .Png 파일을 PHP 서버에 업로드하려고합니다.Base64로 인코딩 된 이미지를 PHP 서버로 업로드

아래 코드는 응답에서 아무 것도 반환하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

Base64로 인코딩 된 문자열과 파일 이름을 보내고 있습니다. (예 : "sign1234.png") 당신이 $ _FILES에서 이미지 데이터를 포스트에서 데이터를 얻을뿐만 아니라 얻기 위해 노력하고있다하지만 난 정확한 당신의 코멘트를 읽을 경우에만 '[$ _POST에서 데이터를 전송 보인다

<?php 

if(isset($_POST['image']) && isset($_POST['name']){ 

$image = $_POST['image']; 
$name = $_POST['name']; 

$png = base64_to_jpeg($image,$name); 

$target = 'uploads/'.$name; 
$result = move_uploaded_file($_FILES['$png']['tmp_name'], $target); 

if($result){ 
     $response["success"] = 1; 
     $response["message"] = "Upload Successful."; 
     echo json_encode($response); 
}else{ 
    $response["success"] = 0; 
    $response["message"] = "Server error. Could not upload."; 
    echo json_encode($response); 
} 

} 

function base64_to_jpeg($base64_string, $output_file) { 
    $ifp = fopen($output_file, "wb"); 

$data = explode(',', $base64_string); 

fwrite($ifp, base64_decode($data[1])); 
fclose($ifp); 

return $output_file; 
} 
?> 
+0

귀하의 질문은 무엇인가? 뭔가 잘못 됐는지 아닌지 스스로 시험 할 수 있다고 생각합니다. – Shubhank

+2

$ _FILES [ '$ png']는 이미지가 요청의 기본 64 객체로 제공되고 멀티 파트 양식의 파일이 아니기 때문에 null이 될 것입니다. – Shubhank

답변

3

이미지 ']와 $ _POST ['이름 ']. 주어진 2 개의 데이터 만 사용하는 스크립트를 작성했습니다. 내 대본을 테스트하지는 않았지만 당신을 위해 속임수를 써야합니다.

변화

개인 $의 save_path = '해당 ServerPath/행/이미지/폴더 /';

귀하의 서버 정보입니다.

코드 :

<?php 

class image{ 

    private $save_path = 'serverpath/to/image/folder/'; 
    private $image_string = ''; 
    private $image_name = ''; 
    private $image; 
    private $response = array(); 

    public $loaded = false; 

    public function __construct(){ 
     $this->response = array(
      'success' => 0, 
      'message' => 'unknown error.' 
     ); 
     $this->image_name = filter_input(INPUT_POST, 'name'); 
     $this->image_string = filter_input(INPUT_POST, 'image'); 
     if(!empty($this->image_name) && !empty($this->image_string)){ 
      $this->loaded = true; 
     } 
    } 

    public function save(){ 
     if(!empty($this->image_name) && !empty($this->image_string)){ 
      return $this->progress(); 
     } 
     else{ 
      $this->response['message'] = 'Error. Not all required infor is given.'; 
      return $this->response; 
     } 
    } 

    private function progress(){ 
     $imgarr = explode(',', $this->image_string); 
     if(!isset($imgarr[1])){ 
      $this->response['message'] = 'Error on post data image. String is not the expected string.'; 
      return $this->response; 
     } 
     $this->image = base64_decode($imgarr[1]); 
     if(!is_null($this->image)){ 
      $file = $this->save_path . $this->image_name; 
      if(file_exists($file)){ 
       $this->response['message'] = 'Image already exists on server.'; 
       return $this->response; 
      } 
      if(file_put_contents($file, $this->image) !== false){ 
       $this->response['error'] = 1; 
       $this->response['message'] = 'Image saved to server'; 
       return $this->response; 
      } 
      else{ 
       $this->response['message'] = 'Error writing file to disk'; 
       return $this->response; 
      } 
     } 
     else{ 
      $this->response['message'] = 'Error decoding base64 string.'; 
      return $this->response; 
     } 
    } 
} 

$img = new image(); 
if($img->loaded){ 
    $result = $img->save(); 
    echo json_encode($result); 
} 
else{ 
    $result = array(
     'success' => 0, 
     'message' => 'Not all post data given' 
    ); 
    echo json_encode($result); 
} 
+0

답변을 주셔서 대단히 감사합니다. 매력처럼 작동 ..! 대신 0 번째 아이템을 얻는 데 작은 변화가있었습니다. $ imgarr [1] –

+0

환영합니다, 행운을 빈다. – Paules

관련 문제