2016-04-30 154 views
2

我有一個簡單的表單,用戶可以上傳文件。文件上傳到public/uploads目錄。Laravel 5:動態生成上傳文件的鏈接(路徑)

下面的表格中有public/uploads目錄中的所有文件列表。

所以,這裏是我的控制器方法:

public function store(Request $request) 
{ 
    if ($request->hasFile('file_upload')) { 
     if ($request->file('file_upload')->isValid()) { 
      $request->file('file_upload')->move(public_path().'/uploads/', $request->file('file_upload')->getClientOriginalName()); 
     } 
    } 

    $list_of_files = \File::allFiles(public_path().'/uploads/'); 

    return view('foo', compact('list_of_files')); 
} 

這裏是顯示文件列表中查看文件:

<ul> 
    @foreach($list_of_files as $file) 
     <li><a href="#">{{ basename($file) }}</a></li> 
    @endforeach 
</ul> 

我應該把什麼HREF =」「有鏈接到這些文件(以及我需要什麼路線,以便這些鏈接工作)?

+1

不是解決辦法,或者你正在尋找,但用它來命名文件,並避免其他後患日期(「YmdH:I:S」)是什麼。「 - 」 $圖像 - > getClientOriginalName(); –

回答

1

工作,你可以使用asset()助手生成一個URL到您的公共目錄。

鑑於您正在將您的文件存儲在您的uploads目錄中。你會使用它,像這樣<li><a href="{{ asset('uploads/' . basename($file)) }}">{{ basename($file) }}</a></li>

你只需要確保basename($file)是名稱的文件,這樣當他們點擊它其實需要他們到文件的鏈接。

在全:

<ul> 
    @foreach($list_of_files as $file) 
     <li><a href="{{ asset('uploads/' . basename($file)) }}">{{ basename($file) }}</a></li> 
    @endforeach 
</ul> 
+0

謝謝,我還有一個關於路由的更多_noob_問題:現在我已鏈接到文件,當我點擊某個鏈接(例如打開一些.pdf文檔)時,我將擁有以下URL:http:// localhost /uploads/invoice_sale.pdf。我沒有在** routes.php **中定義的匹配這些URL的任何內容(** uploads/some_file_name **)。我認爲如果我們想要這樣的鏈接工作 - 我們需要在routes.php中定義它們?我的意思是,我的網站上的每個網址都必須在routes.php中定義才能工作,對吧?對不起,我英文很差。 – PeraMika

+1

如果該目錄位於公共文件夾內,那麼您可以直接導航到它 - 與使用css文件或JavaScript文件的方式相同。如果目錄不在公共文件夾中,那麼您將需要設置一個路徑和函數來處理文件 – James

+1

@PeraMika的查看或下載,例如,如果您將文件invoice.pdf存儲在public/uploads/invoice中。 pdf,那麼你可以使用example.com/uploads/invoice.pdf直接在你的瀏覽器中導航,而無需爲它定義特定的路由。那有意義嗎? – James

0
href="/public/{{ basename($file) }}" 

應該做的工作,以使鏈接沒有限制