Laravel文件上传无法在godaddy服务器中运行

时间:2018-05-04 05:34:13

标签: php laravel file-upload

在我的laravel项目中上传文件时遇到问题。它在本地工作正常但不在godaddy服务器上工作。我使用以下方法来存储我的文件,

第一种方法:

$image = $request->file('avatar_file');
$imageName = time().'.'.request()->avatar_file>getClientOriginalExtension();
$destinationPath = public_path().'/images/' ;
request()->avatar_file->move($destinationPath, $imageName);

第二种方法:

$image = $request->file('file');
$imageName = time().'.'.request()->file->getClientOriginalExtension();
$request->file('file')->storeAs('documents', $imageName);

我已经为本地工作而不是服务器创建了符号链接。

1 个答案:

答案 0 :(得分:0)

由于您在共享托管平台上托管了Laravel应用,因此您的应用无法知道公共目录的正确路径。

因此,您需要在public/index.php文件中定义一个函数,如下所示:(将其粘贴到index.php文件的顶部)

function public_path($path = '')
{
    return realpath(__DIR__)
        .($path ? DIRECTORY_SEPARATOR.$path : $path);
}

在此处定义此函数会导致跳过相同名称的辅助函数,从而允许覆盖其功能。这是Laravel的“公共”目录使用“非标准”位置所必需的。

现在为您的路径创建一个新的服务提供者: php artisan make:PublicPathServiceProvider

register()函数中,您需要代码为:

public function register()
    {
        if (env('PUBLIC_PATH') !== null) {
            //An example that demonstrates setting Laravel's public path.
            $this->app['path.public'] = base_path().'/../'.env('PUBLIC_PATH');
        } else {
            $this->app['path.public'] = base_path().'/../public_html';
        }

        // Possible environment changes
        if ($this->app->environment() === 'local') {
        } elseif ($this->app->environment() === 'test') {
        } elseif ($this->app->environment() === 'production') {
        }
    }

现在,在您的应用中注册此提供商。 config/app.php

在提供商下添加:

App\Providers\PublicPathServiceProvider::class,

最后一步,在.env文件中,创建一个新变量: PUBLIC_PATH=/public_html

你很高兴!!! ...

注意:不要忘记查看上传Laravel应用的路径。 (上图,假设路径为 public_html

重要提示:更改配置后,您可能需要清除缓存:

php artisan config:cache

php artisan cache:clear