2017-10-18 8 views
2

저는 Laravel에서 StoreAs 메소드를 사용하여 html 파일 핸들러에 의해 첨부되지 않았으며 "File"유형의 요청을 통해 전송 된 이미지를 저장하려고했습니다. https://foliotek.github.io/Croppie/storeas 메서드()를 사용하여 laravel 내에 base64로 인코딩 된 이미지를 저장하려면 어떻게해야합니까?

그러나, croppie은 표준 HTML의 FileHandler에 자른 이미지를 첨부 할 수있는 쉬운 솔루션 날을 제공하지 않는 것 :

나는 croppie를 사용하여 자른 이미지를 만들었습니다. 그래서 이미지 정보와 이미지 이름을 숨겨진 파일 요소에 첨부하여 내 laravel 인스턴스에 게시물 요청과 함께 전송하기로 결정했습니다. 그러나 내 문제는 StoreAs 메서드를 사용하려는 것이므로 이미지를 큰 URL로 가져올 때 매우 유용하다고 생각되는 특정 URL에 이미지를 첨부 할 수 있기 때문입니다.

Laravel의 StoreAs() 메소드는 Symfony \ Component \ HttpFoundation \ File \ UploadedFile 클래스를 기반으로하는 UploadedFile 유형의 객체 만 사용할 수 있습니다. 이 UploadedFile 객체는 파일 핸들러를 html로 사용할 때 파일과 함께 자동으로 전송됩니다.

I이 유사한베이스 64 인코딩 된 이미지가 : 데이터 : 이미지/PNG;베이스 64, iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAgAElEQVR4nOy9d3RUZ5ruuyvnnJNyzpEgcg4mO + e23U7t3Hl6wu2ZOTPn3Dtn8unTTTAYMGBjbDAYCZRBApRIkkpSqZ 및 화상 이름.

내가 직접 Laravel에서 UploadedFile 개체를 만들 수 있다는 것을 알았지 만,이 UploadedFile을 만든 다음 StoreAs() 메서드를 사용하여 생성 된 URL에 연결하는 방법을 이해하는 데 어려움을 겪고 있습니다. Laravel - file path to UploadedFile instance 그리고 여기 하나 :

는 여기이 링크를 발견 https://gist.github.com/m241802/0b5d0a98318304ff08cf

을하지만 난 여전히 완전히 내가 가지고있는 이미지와 이미지 이름의를 벗어난 UploadedFile 개체를 만드는 방법을하지 않습니다.

아무에게도이를 수행하는 방법이 있습니까? 또는 심지어 내 문제에 대한 더 우아한 해결책을 제안 할 수 있습니까 ?? 아마도 누군가가 croppie 라이브러리를 사용한 후 게시물 요청에서 File 객체를 어떻게 보낼 수 있는지에 대한 더 나은 해결책을 갖고 있습니까?

미리 도움을 청하십시오!

+0

당신이 언급 한'UploadedFile'는 내용으로 base64로는 사용할 수 없습니다. 당신이 할 수있는 것은'base64_decode'를 사용하여 내용을 디코딩 한 다음'file_put_contents'를 사용하여 수동으로 파일을 저장하는 것입니다. – Ali

+0

@Ali 감사합니다. FileAsput_contents와 함께 StoreAs() 메소드를 사용할 수 있습니까? 또는 어떻게 file_put_contents를 사용하여 URL 경로를 만들 수 있습니까? StoreAs()는이를 위해 특별히 만들어진 laravel 메소드 인 반면, file_put_contents는 PHP 메소드입니다. – Benny

답변

2

이 시도 :

$image = $request->input('image'); // your base64 encoded 
$image = str_replace('data:image/png;base64,', '', $image); 
$image = str_replace(' ', '+', $image); 
$imageName = 'test.png'; 
\File::put(storage_path(). '/' . $imageName, base64_decode($image)); 
+0

이것은 올바른 길로 나를 잡았습니다! 결국 File :: put 대신에 Storage :: put()을 사용했습니다. 감사합니다! – Benny