我无法在laravel中找到Storage Facade的实现

时间:2016-05-13 12:08:01

标签: laravel filesystems storage

我是laravel的新手,我在laravel上的fileststem工作 (我想做通常的fileststem进程,比如-make dir - copy - put -delete -ect)

我正在使用laravel“Storage”Facade 但是当我输入

我在我的代码中引用了上面的类

 use Illuminate\Support\Facades\Storage;

例如下面:

 if (file_exists(public_path($oldImage))) {
                Storage::delete($oldImage);
            }

没有任何反应,当我提到类代码时,我发现了这个:

namespace Illuminate\Support\Facades;

/**
 * @see \Illuminate\Filesystem\FilesystemManager
 */
class Storage extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'filesystem';
    }
}

所以在哪里实施,如果你有其他方式来处理 文件系统进程而不是“存储”门面?

3 个答案:

答案 0 :(得分:1)

存储空间为facade并访问位于此处的课程Filesystemvendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php

正如您在official filesystem documentation中看到的,代码段使用Storage

<强>更新

您应该添加use Storage;才能使用Storage外观。

答案 1 :(得分:0)

我建议阅读Laravel 8.X文档以初步了解:https://laravel.com/docs/8.x/filesystem

注意:在太过困惑之前,请确保您了解publicUploadedFile之间的区别。

对于初学者来说,您应该以上传文件并获得$request->file('name')类型为首要目标。

您可以通过// $request->input('images') foreach ($images as $image) { \Log::debug($image->getClientOriginalName()); } 之类的文件访问单个文件,或者通过诸如以下之类的文件访问图像数组:

use Illuminate\Support\Facades\Storage;

$slug = 'davids-sandwich-photos';

foreach ($images as $image) {
    Storage::putFileAs(
        'images' .'/'. $slug,
        $image,
        $image->getClientOriginalName()
    );
}

如果文件上传可以是单个和/或多个,则我建议使用数组方法,因为包装在数组中的单个文件允许您对单个和多个上传使用相同的语法(即:foreach循环可以正常工作一张图片,没有多余的代码。

这是一个例子:

Storage::putFileAs()

'images' .'/'. $slug .'/'. Auth::user()->id可以采用3个参数:目录,内容,文件名。您可以在上面的代码中看到内插静态目录名和派生目录名的组合。您可以执行类似/images/davids-sandwich-photos/11的操作来将文件保存在/storage/app/中。

然后,检查您的回购目录:images并查找Storage目录。

您可以在测试过程中手动删除文件夹,以使轴承保持挺直状态。

这应该足以使大多数人开始使用。

为避免使用 foreach ($images as $image) { $image->storeAs( 'examples' .'/'. $slug, $image->getClientOriginalName(), 'public' ); } 门面,可以使用:

config/filesystems.php

-

如果要开始操作驱动程序,请查看disks部分下的 <img v-for="image in example.images" :key="image.filename" :src="`/storage/examples/${example.slug}/${image.filename}`" > ,但我不是数据库管理员。

我在旅途中也保存了此文件:https://medium.com/@shafiya.ariff23/how-to-store-uploaded-images-in-public-folder-in-laravel-5-8-and-display-them-on-shared-hosting-e31c7f37a737。如果您遇到诸如符号链接之类的问题,可能会需要它。

<img src="/storage/examples/slug/filename.jpg">

注意:Vue JS的重要部分是使用/storage/app/public/examples/slug/filename.jpg,如果您的文件位于{{1}}中,请密切注意每个字符。

答案 2 :(得分:-1)

public_path函数返回公共目录的完全限定路径,即laravel应用程序内的公共目录。使用Storage时,路径将设置为storage / app目录。

if (file_exists(public_path($oldImage))) {
  //public_path($oldImage) will check for file in public directory
  Storage::delete($oldImage); //Will delete file in storage/app directory
}

修改后的代码应为

if(Storage::has($oldImage)){
    Storage::delete($oldImage);
}