2017-03-10 52 views
0

我目前正在使用Laravel進行項目工作,而且我對如何正確處理上傳的文件感到失望。Laravel的文件系統vs上傳文件與磁盤

我需要的是將上傳的文件存儲到特定的目錄(私人,只能由服務器訪問),它是一個CSV文件,我需要處理它的數據。所以,我打算使用fgetcsv方法逐行讀取文件,但是,我需要一個文件句柄。

根據文檔,上傳的文件存儲在一個臨時目錄中,您可以通過調用請求對象上的file('variablename')方法來檢索表示文件的UploadedFile對象。由於我需要堅持這些文件,因此我需要調用存儲方法,如documentation所述(或者可能使用不同的方法)。可悲的是,存儲方法返回相對於「磁盤根」的路徑,這意味着在FileSystem對象中配置了一個Disk對象。可能使用fopen與該路徑不起作用,我會需要一個絕對路徑。

由於我知道本地磁盤上配置的根是什麼(storage_path('app')),我提出的一個骯髒的解決方法是使用storage_path方法。

這將是這樣的

$local_path = $file->store('uploads', 'local'); 
$abspath = storage_path('app') . '/' . $local_path; 
// Pass the absolute path to the business layer 
// In the business layer... 
$fh = fopen($abspath, 'r'); 
// Do the thing 

有沒有更好的方法嗎?

回答

0

我終於找到了如何獲得的絕對路徑,但該方法沒有正式記錄,但這個工作對我來說:

$abspath = Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix($local_path);