【问题标题】:Issue with Storage on shared hosting共享主机上的存储问题
【发布时间】:2021-06-14 05:09:10
【问题描述】:

我正在共享主机上部署我的第一个项目。

我按照本教程部署网站并将public 文件夹转换为我的托管计划的public_html 文件夹。

当我从我的网站上传一张图片时(使用storeAs() 方法),文件上传到private/storage 文件夹,而不是public 文件夹(我想要的)。

asset() 函数尝试显示来自public_html/storage 的图像。

我能做什么?

谢谢你:)

我的文件是这样的:

private/
- app/
- bootstrap/
- config/
- database/
- resources/
- routes/
- storage/
- tests/
- vendor/
public_html/
- css/
- js/
- images/
- js/
- storage/

(Laravel 8,尝试托管在 Hostinger 上)

教程:https://dev.to/pushpak1300/deploying-laravel7-app-on-shared-hosting-hostinger-31cj

【问题讨论】:

  • 你运行这个命令了吗php artisan storage:link

标签: php laravel


【解决方案1】:

为什么会出现这个问题?

如果您在项目中实现并需要存储,那么出于安全原因,您需要将存储文件夹链接到公用文件夹,并使 URL 简单、干净和用户可读,所以当您将 laravel 项目上传到服务器,您需要运行以下命令行来完成链接过程:

php artisan storage:link

并且由于您将 laravel 项目托管到共享服务器上,因此您无法访问终端来运行上述命令行。因此,我将向您展示一种无需使用 SSH 或终端即可手动执行此操作的方法。 解决问题的步骤 1- 在本地主机服务器端(在将项目上传到服务器之前),确保您已完成文件系统配置,然后运行以下命令行:

php artisan storage:link

之后,您将收到一条消息“链接已创建。”现在没关系。 2-将项目上传到服务器,存储链接将无法正常工作,因此我们需要开始修复此问题。 3- 转到公共文件夹,您会找到一个名为“storage”的文件夹,将其删除。 4- 转到路由文件夹并打开“web.php”文件,然后将以下代码复制并粘贴到文件顶部:

Route::get('/linkstorage', function () {
    Artisan::call('storage:link') // this will do the command line job
});

不要忘记保存更改。 此外,您可以通过“api.php”并使用邮递员等请求工具来执行相同的过程。 5- 现在我们只需要运行这段代码,所以我们需要通过在浏览器搜索栏中输入以下 URL 来执行 GET 请求: “https://www.your-domain.com/public/index.php/linkstorage” 要么 “https://www.your-domain.com/public/linkstorage” 此请求将运行上述代码“Artisan::call('storage:link')”,进而运行命令行

PHP artisan storage: link

现在您可以进入公共文件夹,您将看到“storage”文件夹再次创建并标记为快捷文件夹,这意味着公共存储文件夹现在已链接到项目的存储文件夹。 6-现在如果你上传或创建一个文件到storage文件夹,那么它也会出现在public/storage文件夹中,现在你可以在浏览器的搜索栏点击文件的URL,你将成功获取文件:)。

【讨论】:

  • 问题是php artisan storage:link为文件夹private/public/storage创建链接,而不是public_html/storage(不在同一目录中)。 public_html/private/ 处于同一级别(这是我的 Laravel 项目)
【解决方案2】:

好的,伙计们,我找到了解决方案!

这里是如何使用 public_html 文件夹在一个共享主机上部署您的 Laravel 项目:https://dev.to/pushpak1300/deploying-laravel7-app-on-shared-hosting-hostinger-31cj

这可行,但如果您处理文件上传,您可能会遇到(像我一样)storeAs() 方法的问题。

为了解决这个问题,我编辑了MyProject/config/filesystem.php,将其添加到可用磁盘中:

'public_folder' => [
   'driver' => 'local',
   'root' => 'PATH',
   'url' => env('APP_URL').'/storage',
   'visibility' => 'public',
]

PATH 替换为公共存储的完整路径(例如/home/you/domains/mydomain.com/public_html/storage/)。

现在,打开管理文件上传的控制器并像这样编辑它:

request()->image->storeAs('/uploads', 'filename.png', 'public_folder');

这会将request()->image 上传到public_html/storage/uploads/filename.png

如果你遇到和我一样的问题,希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2018-03-10
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多