2017-10-18 30 views
2

我在嘗試使用Laravel中的StoreAs方法來存儲未被HTML文件處理程序附加的圖像,並且已通過類型爲「File」的請求發送了該圖像。如何使用storeas方法()在laravel內部存儲base64編碼圖像?

我創建使用croppie裁剪圖像:https://foliotek.github.io/Croppie/

然而,croppie似乎並沒有給我提供一個簡單的解決方案,以裁剪後的圖像連接到標準的HTML文件處理器。所以我決定將圖像信息和圖像名稱附加到隱藏的文件元素,並將其與我的發佈請求一起發送到我的laravel實例。不過,我現在的問題是我想使用StoreAs方法,因爲它允許我將圖像附加到特定的URL,在檢索大量圖像時我可以檢索到這些特定的URL,這對我來說非常有用。

Laravel中的StoreAs()方法顯然只允許使用基於Symfony \ Component \ HttpFoundation \ File \ UploadedFile類的UploadedFile類型的對象。當在html中使用文件處理程序時,這個UploadedFile對象顯然會與文件一起自動發送。

我有一個類似的base64編碼圖像:數據:圖像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAgAElEQVR4nOy9d3RUZ5ruuyvnnJNyzpEgcg4mO + e23U7t3Hl6wu2ZOTPn3Dtn8unTTTAYMGBjbDAYCZRBApRIkkpSqZ 和圖像名。

我發現我可以在Laravel自己創建一個UploadedFile對象,但我很難理解如何創建此UploadedFile,然後使用StoreAs()方法將其鏈接到生成的url。

我發現這個鏈接在這裏:Laravel - file path to UploadedFile instance 而這一次在這裏:https://gist.github.com/m241802/0b5d0a98318304ff08cf

可是我還是沒有完全得到我怎麼能出去我有圖像和圖像名稱的創建UploadedFile的對象。

有沒有人有一個想法如何做到這一點?或甚至可以建議一個更優雅的解決方案,我的問題??也許有人有更好的解決方案,可以在使用croppie庫後如何發送文件對象的請求?

在此先感謝您的幫助!

+0

您將無法使用'UploadedFile'爲內容的base64如你所提到的。你可以做的是使用'base64_decode'解碼內容,然後使用'file_put_contents'手動保存文件 – Ali

+0

@Ali感謝您的回覆,是否有可能使用storeAs()方法與file_put_contents?或者我怎樣才能使用file_put_contents創建一個url路徑?似乎file_put_contents是一個PHP方法,而StoreAs()是專門爲此製作的laravel方法。 – 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

這讓我走上了正軌!最後我用Storage :: put()而不是File :: put,謝謝! – Benny