2017-06-15 101 views
3

我在託管我的網站的服務器不支持links,所以我不能運行php artisan storage:link將我的存儲目錄鏈接到公共目錄。我試圖重新制作filesystem.php中的磁盤配置,以直接引用public文件夾,但它似乎也沒有工作。有沒有辦法使用Laravel庫直接將文件上傳到公用文件夾中,還是必須使用php方法?提前致謝。如何將Laravel中的文件直接上傳到公用文件夾?

回答

9

您可以創建在配置/ filesystems.php新的存儲盤:

'public_uploads' => [ 
    'driver' => 'local', 
    'root' => public_path() . '/uploads', 
], 

和存儲文件是這樣的:

if(!Storage::disk('public_uploads')->put($path, $file_content)) { 
    return false; 
} 
+0

使用這種方法,我怎麼能文件命名爲WEL? –

+1

$ path將不得不包含當然的文件名,但它也可以包含一個或多個子文件夾。 – sunomad

+0

'$ path = $ request-> photo-> storeAs('images','filename.jpg','public_uploads');'爲上傳的文件使用自定義名稱。這是文檔。 https://laravel.com/docs/5.5/requests#storing-uploaded-files – Tharanga

0

你應該嘗試跳過你已經添加method =「post」enctype =「multipart/form-data」到你的表單。請注意,公共路徑(.uploadedimages)將被移動到您的項目目錄中的公用文件夾,並且將上傳的圖像位於此處。

public function store (Request $request) { 

    imageName = time().'.'.$request->image->getClientOriginalExtension(); 
    $request->image->move(public_path('/uploadedimages'), $imageName); 

    // then you can save $imageName to the database 

} 
0

除了每一個答案,我會建議添加另一個保護層,因爲它是一個公共文件夾。

對於你將不得不在需要保護您的公共文件夾中的所有文件,這樣做將驗證對它們的訪問路線,像

/files/images/cat.jpg

和看起來像/files/images/{image_name}路線,所以你可以驗證用戶針對給定的文件。

正確的驗證後,你只是做 return response($full_server_filepath, 200)->header('Content-Type', 'image/jpeg');

它使一個工作有點困難,但更安全

+0

如果文件需要保護,爲什麼要將它存儲在公用文件夾中? – sunomad

+0

如果文件需要保護,爲什麼要將其存儲在存儲文件夾中?唯一的區別在於,公用文件夾中的文件默認情況下與存儲位置相反。這意味着無論您選擇什麼位置,您仍需要爲文件編寫訪問層。 –

+0

對我來說聽起來很糟糕的設計實踐,例如將模型存儲在控制器文件夾中,或者將javascript文件存儲在css文件夾中。公共文件夾是爲了保存對公衆開放的文件,因此也就是名稱。 – sunomad

相關問題