2017-10-11 67 views
0

我正在使用Laravel Backpack image Field Type文檔上傳圖片上傳。Laravel揹包圖片字段類型:以原始文件名存儲圖片

在他們的mutator示例中,他們使用md5文件名,但是我想在存儲文件時使用原始文件名。

// if a base64 was sent, store it in the db 
    if (starts_with($value, 'data:image')) 
    { 
     // 1. Make the image 
     $image = \Image::make($value); 
     // 2. Generate a filename. 
     $filename = md5($value.time()).'.jpg'; 
     // 3. Store the image on disk. 
     \Storage::disk($disk)->put($destination_path.'/'.$filename, $image->stream()); 
     // 4. Save the path to the database 
     $this->attributes[$attribute_name] = $destination_path.'/'.$filename; 
    } 

我知道我需要編輯步驟2中,但不能完全肯定怎麼了,覺得我可能需要編輯步驟1

獎金問題只是幫助我的理解:什麼是「\ 「在步驟一個‘\圖片:: ...’

+0

爲什麼?您不應該使用原始文件名稱。你會遇到各種各樣的問題,比如多個用戶上傳'test.jpg',你的服務器不喜歡的奇怪字符的名稱等。 – ceejayoz

+0

基本上沒有原始文件名,因爲揹包沒有上傳圖像本身,但文件內容作爲base64 – Danny

+0

@ceejayoz不會在這個項目中的任何多個上傳,並且名稱是標準字符 – cvassios

回答

0

您可能需要使用文件門面和輸入門面嘗試 https://laravel.com/api/5.4/Illuminate/Support/Facades/File.html

我通常進行由具有FormRequest驗證輸入的類型(如果名稱爲x或文件的文件輸入jpeg來,或者是必需的),並直接使用輸入門面檢索它,File Facade存儲它。如果您收到的圖像爲Base64,您可以嘗試類似:

$file = Input::file('file'); 
if (!File::exists(storage_path('uploads/'.$destinationPath))) { 
    File::makeDirectory(storage_path('uploads/'.$destinationPath), 0755, true); 
} 
Storage::disk('uploads')->putFileAs($destinationPath, $file, $file->getClientOriginalName()); 

甚至:

$data = Input::all(); 
Image::make(file_get_contents($data->base64_image))->save($path); 

希望這有助於

+0

就可以輕鬆識別/查找服務器上的圖像這將在我的模型中進行嗎? – cvassios

+0

根據您的設計模式,您可以將它放在任何你想要的地方。從任何地方都可以訪問外牆,只要您使用Illuminate \ Support \ Facades \ File;例如 – abr