我在我的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视图下载文件。我的文件是加密的,我需要一个关心解密的控制器,然后再将文件发送给用户。
答案 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"