dav*_*tar 68 php laravel-5 flysystem
我一直在尝试使用与Laravel 5的新Flysystem集成.我正在将"本地化"路径存储到数据库,并使存储外观完成路径.例如,我存储screenshots/1.jpg和使用
Storage::disk('local')->get('screenshots/1.jpg')
Run Code Online (Sandbox Code Playgroud)
要么
Storage::disk('s3')->get('screenshots/1.jpg')
Run Code Online (Sandbox Code Playgroud)
我可以在不同的磁盘上检索相同的文件.
get 检索文件内容,但我希望在我的视图中使用它,如下所示:
<img src="{{ Storage::path('screenshots/1.jpg') }}" />
Run Code Online (Sandbox Code Playgroud)
但路径,或任何能够检索完整路径的东西都不可用(据我所见).那我怎么能回到完整的路径呢?或者,我想知道这是否是设计的?如果是这样,为什么我不应该能够获得完整的路径?或者,我是否完全以错误的方式解决这个问题?
sho*_*ild 138
存储磁盘的路径是:
$storagePath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix()
Run Code Online (Sandbox Code Playgroud)
我不知道任何更短的解决方案......
您可以将$ storagePath共享给您的视图,然后只需调用
$storagePath."/myImg.jpg";
Run Code Online (Sandbox Code Playgroud)
Bil*_*kin 50
从Laravel 5.4开始,这个方法就存在了,你可以通过以下方式得到它:
$path = Storage::disk('public')->path($filename);
Run Code Online (Sandbox Code Playgroud)
Per*_*ell 49
编辑:L5.2 +的解决方案
有一个更好,更直接的解决方案.
使用Storage::url($filename)得到给定文件的完整路径/ URL.请注意,您需要将S3存储文件系统设置为config/filesystems.php:'default' => 's3'
当然,你也可以Storage::disk('s3')->url($filename)用同样的方式做.
正如您所看到的,config/filesystems.php还有一个'cloud' => 's3'定义的参数,它指的是Cloud文件系统.如果你想保留本地服务器中的存储文件夹但是检索/存储云使用中的一些文件Storage::cloud(),它们也有相同的文件系统方法,即Storage::cloud()->url($filename).
Laravel文档没有提到这种方法,但是如果你想了解它的更多信息,可以在这里查看它的源代码.
这就是我如何工作 - 使用环境变量在s3和本地目录路径之间切换,将路径传递给所有视图.
在.env:
APP_FILESYSTEM=local or s3
S3_BUCKET=BucketID
Run Code Online (Sandbox Code Playgroud)
在config/filesystems.php中:
'default' => env('APP_FILESYSTEM'),
Run Code Online (Sandbox Code Playgroud)
在app/Providers/AppServiceProvider中:
public function boot()
{
view()->share('dynamic_storage', $this->storagePath());
}
protected function storagePath()
{
if(Storage::getDefaultDriver() == 's3') {
return Storage::getDriver()
->getAdapter()
->getClient()
->getObjectUrl(env('S3_BUCKET'), '');
}
return URL::to('/');
}
Run Code Online (Sandbox Code Playgroud)
如果您只想显示存储(磁盘)路径,请使用以下命令:
Storage::disk('local')->url('screenshots/1.jpg'); // storage/screenshots/1.jpg
Storage::disk('local')->url(''): // storage
Run Code Online (Sandbox Code Playgroud)
另外,如果您有兴趣,我为 Laravel创建了一个包(https://github.com/fsasvari/laravel-uploadify),以便您可以在 Eloquent 模型字段上使用所有这些字段:
$car = Car::first();
$car->upload_cover_image->url();
$car->upload_cover_image->name();
$car->upload_cover_image->basename();
$car->upload_cover_image->extension();
$car->upload_cover_image->filesize();
Run Code Online (Sandbox Code Playgroud)
小智 5
首先获取文件 url/link 然后是路径,如下:
$url = Storage::disk('public')->url($filename);
$path = public_path($url);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163807 次 |
| 最近记录: |