提问者:小点点

Laravel部署:存储映像无法正常工作


在将我的laravel项目从本地部署到Apache Web服务器后,除图像链接外,所有工作都正常。这里的代码:

图像存储在:

storage/app/public/photos

运行命令后:

php artisan storage:link

图像链接到:

public/storage/photos

控制器:

if ($request->hasFile('photo')) {
   $extension = $request->file('photo')->getClientOriginalExtension();
   $file = $request->file('photo');
   $photo = $file->storeAs('public/photos', 'foto-' . time() . '.' . $extension);
   $user->photo = $photo;
   $user->save();
}

图像在存储/应用/公共/照片上正确上传,并在公共/存储/照片中正确链接,但不会显示在前端。

在blade中,我尝试使用Storage::url检索路径

{{Storage::url($user->photo)}}

及资产(

{{asset($user->photo)}}

在这两种情况下,图像都不存在

形象的公共路径是:

http://mywebsite.com/storage/photos/foto-1522914164.png

共3个答案

匿名用户

你应该使用url函数来显示你的图像,如下所示。

url($user->photo);

匿名用户

我建议更改控制器代码如下:

if ($request->hasFile('photo')) {
  $extension = $request->file('photo')->getClientOriginalExtension();
  $file = $request->file('photo');
  $photoFileName = 'foto-' . time() . '.' . $extension;
  $photo = $file->storeAs('public/photos', $photoFileName);
  $user->photo = 'photos/' . $photoFileName;
  $user->save();
}

然后可以使用{{asset($user)-

匿名用户

在我的网络空间上,似乎正确显示图像的唯一方法是创建一个读取和服务图像的自定义路线。

我是这样解决的:

我只在db中存储图像名称:

if ($request->hasFile('photo')) {
    $extension = $request->file('photo')->getClientOriginalExtension();
    $file = $request->file('photo');
    $photoFileName = 'photo-' . $model->id . '.-' . time() . '.' . $extension;
    $photo = $file->storeAs('public/photos', $photoFileName);
    $store = $photoFileName;
}

然后,我创建了读取图像并显示它们的自定义路由:

Route::get('storage/{filename}.{ext}', function ($filename, $ext) {
    $folders = glob(storage_path('app/public/*'), GLOB_ONLYDIR);
    $path = '';
    foreach ($folders as $folder) {
       $path = $folder . '/' . $filename . '.' . $ext;
       if (File::exists($path)) {
          break;
       }
    }

    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;
});

在blade中,我使用存储器显示图像:

{{ Storage::url($photo->photo) }}}