Laravel:如何访问本地磁盘中的文件? - 文件不存在

Posted

技术标签:

【中文标题】Laravel:如何访问本地磁盘中的文件? - 文件不存在【英文标题】:Laravel: how to access a file in the local disk? - File does not exist 【发布时间】:2017-09-02 14:49:42 【问题描述】:

我正在尝试在 laravel 中上传 Excel 文件后对其进行编辑。 该文件已上传到本地磁盘,因此任何人都无法从公众访问它。

文件系统.php

'local' => [
        'driver' => 'local',
        'root' => storage_path('app')

Routes.php

Route::get('test',function()


    // Create new phpExcel object
    $objPHPExcel = new PHPExcel();
    $objPHPExcel = PHPExcel_IOFactory::load(Storage::disk('local')->url('margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx'));
    $objPHPExcel->setActiveSheetIndex(0);
    echo $objPHPExcel->getActiveSheet()->getHighestRow();
)->middleware('admin');

我不断收到错误:

Could not open /storage/margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx for reading! File does not exist.

这行得通

     $objPHPExcel = PHPExcel_IOFactory::load('..'.Storage::disk('local')->url('app/margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx'));

但这很烦人。我认为在 filesystems.php 中指定 'root' => storage_path('app') 意味着 Storage::disk('local') 将直接在应用程序中

【问题讨论】:

您的 0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx 文件在正确的路径中吗? 您将文件传递给 storage/app 但尝试从 storage/margin 获取它尝试在您的 url 函数中添加 app/ 还是同样的错误。但这有效。 “……” Storage::disk('local')->url('app/margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx')。但这很烦人。我认为在 filesystems.php 中指定 'root' => storage_path('app') 意味着 Storage::disk('local') 将直接在应用程序中 【参考方案1】:

URL method 用于获取文件的 URL(即:从浏览器访问它的东西)。你想用get()方法的id。

$contents = Storage::get(''margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx'');

话虽如此,使用 Laravel 操作上传的文件仍有更简单的方法。

// this will take the uploaded file from the request
// and store it into `/storage/someFolder`
$path = $request->file('file')->store('someFolder');

然后您可以使用返回给$path 的值来访问该文件。

编辑

经过下面的讨论,OP决定,即使不是完美的解决方案,他也会使用$objPHPExcel = PHPExcel_IOFactory::load('..'.Storage::disk('local')->url($fileLocation));

【讨论】:

Storage::get 返回此错误:Excel2007.php 第 234 行中的 ErrorException:file_exists() 期望参数 1 是有效路径,给定字符串。我正在使用“存储”方式保存文件,但它返回此路径:“margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx”,我在我的代码中使用它但它不起作用。真烦人。 @medoampir 你能确认 `/storage/app/margin/analyser/0IGkQQgmGXkHrV9ISnBTrGyZFUPfjz3cWJbLGbDN.xlsx' 中确实有一个文件吗? @maedoampir 你的问题表明你在哪里得到错误,你在哪里得到它,因为“url()”得到一个 URL,而不是文件的路径。使用带有正确路径的 'Sorage::get()' (无需在路径中指定 'app')似乎是正确的方法,如果仅仅是因为你认为代码看起来很丑;-) 我只是期待在 filesystems.php 中定义这部分之后('local' => [ 'driver' => 'local', 'root' => storage_path('app'),) .为了能够使用这部分 (Storage::disk('local')) 作为 laravel 的指令来获取 app 文件夹中的文件。为什么我必须将这部分'..'放在 Storage::disk 之前? :( 您刚刚说了两个 cmets,使用 Storage::get('margin/analyser/0IGkQ‌​QgmGXkHrV9ISnBTrGyZF‌​UPfjz3cWJbLGbDN.xlsx‌​') 有效。那里没有“..”?

以上是关于Laravel:如何访问本地磁盘中的文件? - 文件不存在的主要内容,如果未能解决你的问题,请参考以下文章

用户上传本地磁盘中的一个图片文件作为头像

虚拟化vmware esxi 安装在u盘上,却无法识别本地磁盘,是否只能安装在本地磁盘中

transient 关键字

如何在 iOS 本地播放 .ts(传输流)文件

高分求解!!!如何让某个程序只拥有访问某个特定文件夹的权限

如何查看localstorage