【问题标题】:Displaying laravel stored images on shared hosting在共享主机上显示 laravel 存储的图像
【发布时间】:2017-09-20 08:44:06
【问题描述】:

我已经成功地在实时服务器上部署了我的第一个 laravel 应用程序。一切看起来都很棒,除了我无法显示上传到 /myproject_src/storage/app/public/myfolder1 文件夹。

这是我在 HostGator 上的文件夹层次结构:

/myproject_src/

这里是所有laravel源文件(public文件夹除外)

/public_html/mydomain.com/

这里是我的公共目录的所有内容

我正在通过以下方式将文件路径存储到数据库中:

public/myfolder1/FxEj1V1neYrc7CVUYjlcYZCUf4YnC84Z3cwaMjVX.png

这个路径与已经上传到 storage/app/public/myfolder1/ 这个文件夹的图片相关联,是由 laravel 的store('public/myfolder1'); 方法生成的。

我应该怎么做才能在 img 标签中正确显示图像:

<img src="{{ how to point to the uploaded image here }}">

【问题讨论】:

  • &lt;img src="{{ storage_path('public/myfolder1/FxEj1V1neYrc7CVUYjlcYZCUf4YnC84Z3cwaMjVX.png') }}"&gt;你试过了吗?
  • @imrealashu 输出包括我的根目录在内的整个路径。像这样:/home3/eisenheim/myproject_src/storage//public/myfolder1/FxEj1V1neYrc7CVUYjlcYZCUf4YnC‌​84Z3cwaMjVX.png
  • 请检查我的回答,我认为这会有所帮助。我通常在我的共享主机上使用它。
  • @imrealashu 这对我有用,谢谢!

标签: laravel laravel-5 blade shared-hosting laravel-blade


【解决方案1】:

好吧,您可以使用

创建符号链接
php artisan storage:link

并使用访问文件

<img src="{{ asset('public/myfolder1/image.jpg') }}" />

但是,如果您在共享主机上,有时您无法创建符号链接。您想在某些访问控制逻辑后面保护一些文件,可以选择一条特殊的路径来读取和提供图像。例如。

Route::get('storage/{filename}', function ($filename)
{
    $path = storage_path($filename);

    if (!File::exists($path)) {
        abort(404);
    }

    $file = File::get($path);
    $type = File::mimeType($path);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);

    return $response;
});

现在您可以像这样访问您的文件了。

http://example.com/storage/public/myfolder1/image.jpg
<img src="{{ asset('storage/public/myfolder1/image.jpg') }} />

注意:为了灵活性,我建议不要将路径存储在数据库中。请只存储文件名并在代码中执行以下操作。

Route::get('storage/{filename}', function ($filename)
{
    // Add folder path here instead of storing in the database.
    $path = storage_path('public/myfolder1' . $filename);

    if (!File::exists($path)) {
        abort(404);
    }

    $file = File::get($path);
    $type = File::mimeType($path);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);

    return $response;
});

并使用它访问它

http://example.com/storage/image.jpg

希望有帮助:)

【讨论】:

    【解决方案2】:

    这里的简单答案是手动运行php artisan storage:link 命令

    首先,删除公用文件夹中的存储文件夹 然后将此代码添加到 web.php 文件的顶部。

    Artisan::call('storage:link');
    

    希望这会对你有所帮助。

    【讨论】:

      【解决方案3】:

      一种可行的简单方法是在您的共享主机 ssh 终端中运行 php artisan storage:link。然后只需更改filesystem.php中公共驱动程序的url

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

      【讨论】:

        猜你喜欢
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        • 2021-12-16
        • 1970-01-01
        • 2019-11-01
        • 2021-06-14
        • 1970-01-01
        • 2016-12-10
        相关资源
        最近更新 更多