代客显示错误的文件 Url

Valet showing files under wrong Url

目前 运行我的服务器上的问题 link 我的 Laravel 应用程序中的文件。

我目前在 storage/app/public 中有一个 images 文件夹,我 link 使用 php artisan storage:linkstorage/app/public 文件夹编辑到 public

现在 images 文件夹中有一个 image.jpg。 在我的本地系统上使用 valet 时,我可以看到带有拖车的图像 links:

  1. /images/image.jpg
  2. /存储/images/image.jpg

在我的服务器上只有第二个有效(我认为这是正确的,因为 public 目录中没有直接的 images 文件夹。

问题是,我在部署时经常 运行 遇到问题,因为客户无法在线查看图像(因为 link 不工作)。如果我在测试 UI.

时看不到本地图像,这将不是问题

任何人也有这个问题,可以引导我找到某种解决方案吗?

使用 public 磁盘很简单,开箱即用。

public 磁盘使用 'local' 驱动程序,默认情况下使用 storage/app 目录。


命令:

php artisan storage:link 

将在您的 public 文件夹中创建一个符号 link 'storage',该文件夹 link 到 non-public 文件夹 storage/app/public.

当link工作时,可以使用以下命令:

Storage::disk('local')->put('public/file.txt', 'Contents');

这会将 file.txt 存储到

storage/app/public/file.txt 

您将不会在 storage/app/public.file.txt 访问该文件,而是使用 symlink public/storage 访问它...

因此您保存的文件public只能在

访问
public/storage/file.txt

使用资产助手可以获取文件的位置:

echo asset('file.txt');

问题是 LaravelValetDriver 有回退测试;如果 public 目录中不存在该文件,那么它将检查 public 存储目录。

你可以发现 here:

if ($this->isActualFile($storagePath = $sitePath.'/storage/app/public'.$storageUri)) {
    return $storagePath;
}

您可以通过扩展 LaravelValetDriver 并覆盖 isStaticFile 方法的 creating your own Valet Driver 来防止这种行为,例如:

class NoStorageFallbackLaravelValetDriver extends LaravelValetDriver
{

    public function isStaticFile($sitePath, $siteName, $uri)
    {
        if (file_exists($staticFilePath = $sitePath. '/public' . $uri)
       && is_file($staticFilePath)) {
            return $staticFilePath;
        }

        return false;
    }
}