2017-03-10 11 views
0

現在、私はLaravelを使用しているプロジェクトに取り組んでいます。アップロードされたファイルを正しく処理する方法については本当に迷っています。ファイルシステムとアップロードファイルとディスクラーベールの比較

私が必要とするのは、アップロードされたファイルを特定のディレクトリ(プライベートで、サーバーによってのみアクセス可能)に保存することです。これはCSVファイルであり、そのデータを処理する必要があります。ですから、私はfgetcsvメソッドを使用してファイルを1行ずつ読むことを計画していますが、そのためのファイルハンドルが必要です。

ドキュメントによれば、アップロードされたファイルは一時ディレクトリに保存されており、要求オブジェクトに対してfile('variablename')メソッドを呼び出すことによってファイルを示すUploadedFileオブジェクトを取得できます。私はそれらのファイルを維持する必要があるので、私はdocumentation州としてストアメソッドを呼び出す必要があります(または多分別のアプローチを使用する)。悲しいことに、storeメソッドは、 "ディスクルート"に対する相対パスを返します。これは、FileSystemオブジェクトで設定されたオブジェクトを意味します。そのパスに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); 
関連する問題