gpt4 book ai didi

php - 如何从我的 Laravel 项目中的公共(public)图像的 URL 中删除/存储?

转载 作者:行者123 更新时间:2023-12-04 02:52:27 24 4
gpt4 key购买 nike

我想要实现的是从 URL 中删除/storage,这样最终它就是 www.example.com/images/x.jpg 而不是默认的 www.example.com/storage/x.jpg.

我尝试从 config/filesystems.php 中的 url 中删除/storage,如下所示:

// Original

'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL') . '/storage',
'visibility' => 'public',
],

// Modified

'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL'), // <-- changed
'visibility' => 'public',
],

但它不起作用。我认为问题在于,如果没有前缀,它将被视为公用文件夹中的文件。

是否有可能实现我想要实现的目标?

最佳答案

完成此操作最直接的方法是添加新磁盘。通过这种方式,您可以在不影响现有文件和 URL 的情况下将新模式应用到您的图像,还有许多其他好处。

第一步

将您的磁盘添加到config/filesystems.php:

'images' => [
'driver' => 'local',
'root' => storage_path('app/public/images'),
'url' => env('APP_URL') . '/images',
'visibility' => 'public',
],

这是一个如何save file uploads的例子从 Controller 到你的新磁盘:

// storeAs: path, filename, disk
$request->file('image')->storeAs('/', 'x.jpg', 'images')

这就是生成类似于 http://example.com/images/x.jpg 的图像链接的方式:

Storage::disk('images')->url('x.jpg')

第二步

以下是从新路径提供文件的三个不同选项(您只需选择一个):

选项 1

在您的公共(public)目录中创建符号链接(symbolic link)。

ln -s /var/www/example.com/storage/app/public/images /var/www/example.com/public/images

这与 Laravel 用于默认公共(public)磁盘(/storage URL)的方法相同。

从 Laravel 7 开始,您可以修改 config/filesystems.php 来管理额外的符号链接(symbolic link):

    /*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
public_path('storage') => storage_path('app/public'),
public_path('images') => storage_path('app/public/images'),
],

选项 2

在 Laravel 应用程序中创建一个路由来提供图像:

Route::get('images/{file}', function ($file) {
return Storage::disk('images')->response($file);
// or to trigger downloads:
// return Storage::disk('images')->download($file);
});

此选项的缺点是它使用 PHP 进程为每个图像提供服务,而不是像选项 1 和 3 那样由网络服务器处理。

选项 3

在您的网络服务器中创建一个重写规则。

在 nginx 中,它可能看起来像这样:

location /images/ {
root /var/www/example.com/storage/app/public/;
}

在 Apache 中,您可以使用 alias :

Alias "/images" "/var/www/example.com/storage/app/public/images"

关于php - 如何从我的 Laravel 项目中的公共(public)图像的 URL 中删除/存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com