在Backpack CRUD视图中下载时路径错误

时间:2018-05-15 15:57:18

标签: laravel crud laravel-5.6 backpack-for-laravel

我在我的CRUD控制器中添加了一个上传字段。 上传工作正常,文件加载到我的/ storage / private目录。

这是filesystems.php文件:

    'private' => [
        'driver' => 'local',
        'root' => storage_path('private')
    ],

以下是File.php模型中的自定义函数:

public static function boot()
{
    parent::boot();
    static::deleting(function($file) {
        \Storage::disk('private')->delete($file->file);
    });
}

public function setFileAttribute($value)
{
    $attribute_name = "file";
    $disk = "private";
    $destination_path = "";
    // Cifratura del file
    file_put_contents($value->getRealPath(), file_get_contents($value->getRealPath()));
    $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
}

这是我的FileCRUDController.php代码:

    $this->crud->addField(
    [   // Upload
        'name' => 'file',
        'label' => 'File to upload',
        'type' => 'upload',
        'upload' => true,
        'disk' => 'private'
    ]);

但是,当我尝试下载该文件时,它会尝试从http://localhost:8000/storage/myfile.png而不是http://localhost:8000/storage/private/myfile.png

获取该文件

我做错了什么?非常感谢你。

我还想知道是否有办法挂钩自定义函数,而不是直接从CRUD视图下载文件。我的文件是加密的,我需要一个关心解密的控制器,然后再将文件发送给用户。

1 个答案:

答案 0 :(得分:1)

方法url()仍无法用于放置在子目录中的文件。

您还可以使用storage_path函数生成相对于存储目录的给定文件的完全限定路径:

$app_path = storage_path('app');
$file_path = storage_path('app/file.txt');

参考问题#13610

以下适用于版本5.3:

'my-disk' => [
    'driver' => 'local',
    'root'   => storage_path(),
    'url'    => '/storage'
],

\Storage::disk('my-disk')->url('private/myfile.png')

this should return "/storage/private/myfile.png"