【问题标题】:Image storage link not working in online server in laravel图像存储链接在 laravel 的在线服务器中不起作用
【发布时间】:2020-01-01 00:32:37
【问题描述】:

我有一个 laravel 应用程序,我在 localhost 中上传图像它正在工作我使用存储目录的链接

php artisan storage:link

本地主机

当使用自己的控制器上传1张图片时,图片将存储在storage/app/public/posts/file1.jpg,同时图片将存储在root/public/storage/posts/file1.jpg => 效果很好。

但在在线服务器共享主机中 当我上传图片时它不起作用

图像将存储在 storage/app/public/posts/file1.jpg,但图像不存储在此处在 root/public/storage/posts/file1.jpg =>

【问题讨论】:

  • 您上传网站时是否再次运行php artisan storage:link
  • 在在线服务器上上传后我没有这样做。而且我不知道在在线服务中运行这个命令
  • 如果您无法访问 ssh,也许此链接可以帮助您 stackoverflow.com/questions/43575027/…
  • 我这样做但同样的问题

标签: php laravel


【解决方案1】:

我无法让 Laravel 存储在我的本地主机上正常工作。

解决方案: 这就是您在本地主机(也可能是您的生产服务器)上解决此问题的方法。

  1. 删除 app/public/storage 文件夹
  2. 删除 storage/app/public 文件夹
  3. 在 storage/app/ 文件夹中创建一个名为“public”的文件夹(没错,就是您刚刚删除的那个)
  4. 运行以下工匠命令:
php artisan storage:link

全部完成!

通过 Laravel 的 Storage::class 上传的文件现在将同时出现在 'app/public/storage' 和 'storage/app/public' 文件夹中。

【讨论】:

    【解决方案2】:

    您可以在路由/控制器中使用 Artisan::call() 方法来执行 artisan 命令,而无需使用终端。

    $exitCode = Artisan::call('storage:link', [] ); echo $exitCode; // 0 exit code for no errors.

    【讨论】:

    • 我将此代码添加到我的路线顶部,但结果相同
    【解决方案3】:

    通过 public_path 更改 storage_path 设置

    'public' => [
      'driver' => 'local',
      'root' => public_path('app/public_html/'),
      'url' => env('APP_URL').'/storage',
      'visibility' => 'public',
    ],
    
    if ($request->hasFile('image')) {
      $image = $request->file('image');
      $filename = 'page' . '-' . time() . '.' . $image->getClientOriginalExtension();
      $location = public_path('app/public_html/images/' . $filename);
      Image::make($image)->resize(1200, 600)->save($location);
      if(!empty($page->image)){
        Storage::delete('images/' . $page->image);
      }
      $page->image = $filename;            
    }
    

    如果还是不行,你可以试试:

    $path = base_path().'/../public_html/images';

    【讨论】:

      【解决方案4】:

      抱歉,如果我将答案发送到垃圾邮件中。这个人发布了同样的问题并解决了这个问题:

      已解决感谢您的所有帮助,我尝试运行 php artisan storage:link 在我的服务器上,我发现我的服务器已禁用 出于安全原因的符号链接。

      所以我改变了我所有的图片上传功能来上传图片 我的公用文件夹而不是存储文件夹,现在一切正常 工作得很好。

      【讨论】:

        【解决方案5】:

        好吧,花了 5 到 6 个小时后,我在这里找到了解决方案

        首先,删除 public/storage {storage} 文件夹 二、把这段代码放在web.php文件的最上面

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

        此代码手动运行php artisan storage:link 命令。

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题! 当我仔细查看存储文件夹时,我发现在我的本地版本上,我有一个链接,但在在线服务器上它是一个常规文件夹。

          这在共享主机上对我有用。 我在路由文件的开头添加了命令“Artisan::call('storage:link', [] );”,并从公共中删除了存储文件夹。删除文件夹很重要,否则它对我不起作用。从路由中删除代码,当它工作时,因为它应该只在服务器上运行一次。

          【讨论】:

            猜你喜欢
            • 2015-07-04
            • 1970-01-01
            • 1970-01-01
            • 2012-12-12
            • 2016-12-20
            • 2018-06-23
            • 1970-01-01
            • 1970-01-01
            • 2016-10-31
            相关资源
            最近更新 更多