文件系统vs UploadedFile与Laravel中的磁盘

时间:2017-03-10 11:29:30

标签: php laravel-5 filesystems

我目前正在使用Laravel开展项目,我真的对如何正确处理上传文件感到失望。

我需要的是将上传的文件存储到特定目录(私有,只能由服务器访问),它是一个CSV文件,我需要处理它的数据。所以,我打算使用fgetcsv方法逐行读取文件,但是,我需要一个文件句柄。

根据文档,上传的文件存储在临时目录中,您可以通过在请求对象上调用UploadedFile方法来检索表示文件的file('variablename')对象。由于我需要保留这些文件,我需要将store方法称为documentation状态(或者使用不同的方法)。遗憾的是,store方法返回相对于“disk root”的路径,这意味着在Disk对象中配置了FileSystem对象。可能使用fopen与该路径不起作用,我需要一个绝对路径。

我提出的一个肮脏的解决方法是使用storage_path方法,因为我知道本地磁盘上配置的根目录是什么(storage_path('app'))。

就像这样

$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

有没有更好的方法?

1 个答案:

答案 0 :(得分:0)

我终于找到了如何获得绝对路径,但是这个方法没有正式记录,但这对我有用:

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