在我的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);
我已经为本地工作而不是服务器创建了符号链接。
答案 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