在共享主机上显示laravel存储的图像

时间:2017-04-23 18:40:50

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

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

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

  

/ myproject_src /

以下是所有laravel源文件(公用文件夹除外)

  

/public_html/mydomain.com /

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

我将以下列方式将文件路径存储到数据库中:

public/myfolder1/FxEj1V1neYrc7CVUYjlcYZCUf4YnC84Z3cwaMjVX.png

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

如何在img标签中正确显示图像,我该怎么做:

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

3 个答案:

答案 0 :(得分:5)

好吧,您可以使用

创建符号链接
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

希望有所帮助:)

答案 1 :(得分:0)

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

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

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

希望这会对您有所帮助。

答案 2 :(得分:0)

一种简单可行的方法是在您的共享主机 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',
        ],
    ]