2017-02-13 57 views
0

我正在爲我的公司創建一個小型機構網站,並且會有一個博客(只能從後臺發佈,僅適用於管理員)。我在上傳圖片時遇到了麻煩。我需要將圖像鏈接存儲在數據庫中,但我不知道如何將上傳的圖像移動到我的資源文件夾中。Laravel 5對圖片/文件上傳的懷疑

這是我第一次在Laravel上使用文件上傳,這些文檔對本地存儲和雲存儲有點混淆。我真的不知道我需要用哪一個......

我只有這在我的模板:

<label for="image" class="col-md-4 control-label">Upload image</label> 
<div class="col-md-6"> 
    <input id="image" type="file" name="image" required> 
</div> 

我不知道如何在控制器來處理這個..

編輯:

所以,在閱讀更多的文檔後,我想我已經明白了。以下是我到目前爲止有:

if ($request->hasFile('image') && $request->file('image')->isValid()) { 
    $path = $request->photo->store('image'); 
} 

但現在我得到這個錯誤:Call to a member function store() on null

我使用public驅動器,因爲每個人都可以看到的博客文章。任何幫助?

+1

它是有據可查的:https://laravel.com/docs/5.4/requests#files – halloei

+0

謝謝。我爲我的問題添加了編輯。請檢查是否可能。 –

+1

'dd($ request-> photo);'return? – Luke

回答

2

試試這個:

$path = $request->image->store('images'); 
+0

是的,我已經修好了,但忘了在這裏發佈答案。謝謝! –

1

您可以使用本地存儲,例如雲存儲持久存儲到Amazon S3存儲桶。

在你的控制器,你可以檢查和使用

if (Input::file('image')) 
{ 
    // file is set. 
    // Move the file. 
    Input::file('image')->move($destinationPath, $fileName); 
} 
+0

我很困惑。在這個鏈接中:laravel.com/docs/5.4/requests#files它表示直接從'$ request'對象使用store方法。你在說要使用Facade(?)輸入。我應該使用哪一個? –

+0

我想這只是偏好。我在過去選擇在代碼中使用Input Facades,但它們只是一個有用的(便攜性較低的)做事方式。我認爲這是來自L4背景,其中Facades更多地記錄在案。 – Luke

+0

我爲我的問題添加了編輯。請檢查是否可能。 –

0

storing-uploaded-files

存儲上傳文件

爲了存儲上傳的文件檢索文件,你通常會使用您的配置文件系統之一。 UploadedFile類具有一種存儲方法,該方法將上傳的文件移動到您的磁盤之一,這可能是本地文件系統上的位置,甚至是雲存儲位置(如Amazon S3)。

store方法接受文件相對於文件系統配置的根目錄的存儲路徑。此路徑不應包含文件名,因爲將自動生成唯一ID作爲文件名。

store方法還接受可選的第二個參數,用於存儲文件的磁盤名稱。該方法將相關的文件的路徑返回磁盤的根:

$path = $request->photo->store('images'); 

$path = $request->photo->store('images', 's3'); 

如果你不想被自動生成一個文件名做,你可以使用storeAs方法,它接受的路徑,文件名,和磁盤名稱作爲它的參數:

$path = $request->photo->storeAs('images', 'filename.jpg'); 

$path = $request->photo->storeAs('images', 'filename.jpg', 's3');