我目前正在使用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
有沒有更好的方法嗎?