2014-11-06 3 views
6

AJax를 통해 base64로 컨트롤러에 png 이미지 파일을 보냅니다. 컨트롤러가 이미 id를 받았지만 여전히 공용 폴더에 저장할 수 없는지 테스트했습니다.Laravel : 컨트롤러의 공용 폴더에 Base64 .png 파일 저장

여기이 쉬운 실수 내 컨트롤러

public function postTest() { 
     $data = Input::all(); 

     //get the base-64 from data 
     $base64_str = substr($data->base64_image, strpos($data->base64_image, ",")+1); 

     //decode base64 string 
     $image = base64_decode($base64_str); 
     $png_url = "product-".time().".png"; 
     $path = public_path('img/designs/' . $png_url); 

     Image::make($image->getRealPath())->save($path); 
     // I've tried using 
     // $result = file_put_contents($path, $image); 
     // too but still not working 

     $response = array(
      'status' => 'success', 
     ); 
     return Response::json($response ); 
} 

답변

4

입니다.

public_path를 잘못 사용하고 있습니다. 다음과 같아야합니다.

$path = public_path() . "/img/designs/" . $png_url; 

또한 이미지 전송 방법을 피할 것입니다. 형식으로 적절한 업로드를보고 Laravel의 Input :: file 메서드를 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 항상 이처럼 public_path()를 사용하며 잘 작동한다. 그리고 나는 문제가 Input :: file 메소드라고 생각한다. 그래서 나는 그것을 사용하여 포기합니다 : P. 내 대답을 확인하십시오! – Expl0de

+0

경로는 문제가 아니며 필수 경로도 아니며'$ path = "/ img/designs /"만 필요합니다. $ png_url'이면 충분합니다. –

0

I'v done it !! $data->base64_image$_POST['base64_image']으로 변경했습니다. 그리고 Image::make($image->getRealPath())->save($path); 대신에 $result = file_put_contents($path, $image);을 사용하십시오. 그러나 이것은 laravel 방법처럼 보이지 않습니다. 나에게 더 우아한 표정으로 다른 길을 말해줘! 당신이 다음 그래서

+0

문제는'$ data-> base64_image'입니다. 대신'$ data [ 'base64_image']'이어야합니다. 내 대답을 확인하십시오. –

0

사실, Input::all()는 입력의 array를 반환

$data->base64_image 
: 이제

$data = Input::all(); 

당신의 $data가 배열이 아닌 당신이 같은 개체로 이미지에 액세스하려고 있도록하는 객체입니다

그래서 작동하지 않습니다. 다음을 사용하여 시도해야합니다 :

$image = $data['base64_image']; 

를이 (base64_image를) 이래로 접근을 $_POST에서 다음 Input::file('base64_image')이 때문에 작동하지 않습니다 Input::file('base64_image') 체크 $_FILES 배열하고 귀하의 경우가 아니다.

+0

그 점을 지적 해 주셔서 감사합니다! 나는 당신의 메소드를'$ result = file_put_contents ($ path, $ image);와 함께 사용하고있다. '이제 PNG 이미지가 만들어집니다. 그러나 파일을 읽을 수 없습니다. '$ data [ 'base64_image']'는 이미 저장 가능한 파일입니까? – Expl0de

+0

아마,'$ base64_str'을 사용 했습니까? –

+1

예, 그래도 읽을 수는 없습니다. 참고로, base64_image는 "data : image/png : base64, iVBORwOkG ....."처럼 보입니다.'$ img = $ data ['fileo '];'의 – Expl0de

2
$data = Input::all(); 
$png_url = "perfil-".time().".jpg"; 
$path = public_path() . "/img/designs/" . $png_url; 
$img = $data['fileo']; 
$img = substr($img, strpos($img, ",")+1); 
$data = base64_decode($img); 
$success = file_put_contents($path, $data); 
print $success ? $png_url : 'Unable to save the file.'; 
+0

$ data [ 'fileo']는 무엇을 나타 냅니까? –

6

개입 이미지 file_get_content 기능을 사용하여 이진 데이터를 가져옵니다 참조 : http://image.intervention.io/api/make

컨트롤러는 다음과 같이해야한다 : 내가 뭐하는 거지

public function postTest() { 
    $data = Input::all(); 
    $png_url = "product-".time().".png"; 
    $path = public_path().'img/designs/' . $png_url; 

    Image::make(file_get_contents($data->base64_image))->save($path);  
    $response = array(
     'status' => 'success', 
    ); 
    return Response::json($response ); 
} 
0

기본적인 방법

를 사용하고 있습니다
$file = base64_decode($request['profile_pic']); 
      $folderName = '/uploads/users/'; 
      $safeName = str_random(10).'.'.'png'; 
      $destinationPath = public_path() . $folderName; 
      file_put_contents(public_path().'/uploads/users/'.$safeName, $file); 

      //save new file path into db 
      $userObj->profile_pic = $safeName; 
     } 
0

내 해결책은 다음과 같습니다.

public function postTest() { 
     $data = Input::all(); 

     //get the base-64 from data 
     $base64_str = substr($data->base64_image, strpos($data->base64_image, ",")+1); 

     //decode base64 string 
     $image = base64_decode($base64_str); 
     Storage::disk('local')->put('imgage.png', $image); 
     $storagePath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix(); 
     echo $storagePath.'imgage.png'; 
     $response = array(
      'status' => 'success', 
     ); 
     return Response::json($response ); 
}