Laravel 5.4显示已上传的图片问题

时间:2017-04-24 08:31:04

标签: php laravel laravel-5.3

我正在学习Laravel 5.4,目前我正在尝试上传图片并在html中显示已上传的图片。

似乎文件已成功上传,但当我想在Html中显示图片时,图片会出现404错误,并且不会显示任何内容。

这是我的设置和代码:

  public function store(Request $request)
    {
        $this->validate($request, [
            'name'  => 'required|string|max:255',
            'desc'  => 'required|string',
            'width' => 'required|numeric',
            'height'=> 'required|numeric',
            'artist'=> 'required|exists:artists,id',
            'photo' => 'required|file'
        ]);

        $artistInfo = Artist::find($request->artist);

        $fileExtension = $request->file('photo')->extension();

        $originalFileName = $request->file('photo')->getClientOriginalName();

        $filePath = Storage::putFile('public', $request->file('photo'), 'public');


        Photo::create([
            'name'      => $request->name,
            'origName'  => $originalFileName,
            'url'       => $filePath,
            'artist_id' => $request->artist,
            'desc'      => $request->desc,
            'width'     => $request->width,
            'height'    => $request->height
        ]);

        return $filePath;//this for test
    }

我的刀片:

                @forelse($photos as $photo)
                    <tr>
                        <td>{{ $photo->name }}</td>
                        <td>
                            <img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
                        <td>{{ $photo->artist->name . ' ' . $photo->artist->family }}</td>
                        <td>{{ $photo->desc }}</td>
                        <td>{{ $photo->width }}</td>
                        <td>{{ $photo->height }}</td>
                        <td class="text-center">
                            <a href="{{ route('artists.edit', ['id' => $photo->id]) }}">
                                <i class="material-icons">edit</i>
                            </a>
                        </td>
                        <td class="text-center">
                            <a href="{{ route('artists.edit', ['id' => $photo->id]) }}">
                                <i class="material-icons">assignment_turned_in</i>
                            </a>
                        </td>
                    </tr>
                @empty
                    <tr>
                        <td>There's no photo Yet</td>
                        <td>&mdash;</td>
                        <td>&mdash;</td>
                        <td>&mdash;</td>
                        <td>&mdash;</td>
                    </tr>
                @endforelse

注意:

我使用php artisan storage:link创建了一个指向我公共文件夹的符号链接,符号链接工作正常...

我在刀片中更改了这一行:

<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>

尝试了这些方式:

 <img class="img" src="{{ asset(storage_path() . ($photo->url)) }}" alt="{{ $photo->name }}" /></td>


 <img class="img" src="{{ storage_path() . ($photo->url) }}" alt="{{ $photo->name }}" /></td>

$photo->url包含图片文件名,例如jDHPOTh7iejFABANSzasNbBWJ09DqLbqJb8ymJhv.png

请您告诉我哪个部分是我的问题?

提前致谢

更新:

我正在使用PhpStorm Ide,当我将公共文件夹下载到我的项目时 - 或者同步这个 - 我的符号链接没有出现在公共文件夹列表中......

这是我公共文件夹中的ls

list of folders in public

这是我的phpStorm项目视图 AFTER 在我的主机中下载公共文件夹的新副本:

Folder list inside my IDE

并注意: 我开始在Windows中开始开发这个网站,然后我把整个项目移动到我的linux远程服务器......

3 个答案:

答案 0 :(得分:1)

对于想要回答此问题的任何人,请点击此链接包含很好的答案

https://stackoverflow.com/a/30191854/417899

答案 1 :(得分:1)

感谢大家的参与,但就我而言,有一个棘手的问题......

我使用php artisan storage:link登录了我的服务器,当我输入root时,符号链接由owner创建为http,似乎Apache没有&# 39; t有权访问此符号链接,因此,chown -R usergroup:username /path/to/link 无法访问这些文件。

<强>解

我有一个服务于5个不同网站的vds,所以 我只是将符号链接所有者的所有者更改为我的相对用户名并解决了问题......

{{1}}

那是......

答案 2 :(得分:0)

我认为问题在于:

$filePath = Storage::putFile('public', $request->file('photo'), 'public');

在这里,您将文件放在public文件夹和此处:

<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>

你正试图从public/storage/获得它。所以改变路径如:

<img class="img" src="{{ asset( 'public/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>

然后再试一次。

注意:此处上传的图片路径存储在public/image.extension中,因此从同一public目录中提取