laravel - 发布我的项目 Laravel 5.7 后无法更改图像
问题描述
我已经在 Hostgator 上发布了我的 Laravel 项目,但是当我试图编辑或更改默认图像时,它给了我错误:
NotWritableException 无法将图像数据写入路径 (/home3/abuali1985/public_html/orbitgit_app/public/orbitgit_app/uploads/user_images/fnM9Ds3RavZTa1irb7fqh0sX9ObaP11v7jYejITI.jpeg)
/home3/abuali1985/public_html/orbitgit_app/vendor/intervention/image/src/Intervention/Image/Image.php
*/
public function save($path = null, $quality = null, $format = null)
{
$path = is_null($path) ? $this->basePath() : $path;
if (is_null($path)) {
throw new NotWritableException(
"Can't write to undefined path."
);
}
if ($format === null) {
$format = pathinfo($path, PATHINFO_EXTENSION);
}
$data = $this->encode($format, $quality);
$saved = @file_put_contents($path, $data);
if ($saved === false) {
throw new NotWritableException(
"Can't write image data to path ({$path})"
);
}
// set new file info
$this->setFileInfoFromPath($path);
return $this;
}
/**
* Runs a given filter on current image
*
* @param FiltersFilterInterface $filter
* @return \Intervention\Image\Image
你能帮我吗 ?
文件系统文件代码:
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/
'default' => env('FILESYSTEM_DRIVER', 'local'),
/*
|--------------------------------------------------------------------------
| Default Cloud Filesystem Disk
|--------------------------------------------------------------------------
|
| Many applications store files both locally and in the cloud. For this
| reason, you may specify a default "cloud" driver here. This driver
| will be bound as the Cloud disk implementation in the container.
|
*/
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
|
| Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
'public_uploads' => [
'driver' => 'local',
'root' => public_path('uploads'),
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
];
用户控制器代码:
<?php
namespace App\Http\Controllers;
use App\Branch;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rule;
use Intervention\Image\Facades\Image;
class UserController extends Controller
{
public function __construct()
{
$this->middleware(['permission:read_users'])->only('index');
$this->middleware(['permission:create_users'])->only('create');
$this->middleware(['permission:update_users'])->only('edit');
$this->middleware(['permission:delete_users'])->only('destroy');
}
public function index(Request $request)
{
$users=User::whereRoleIs('admin')->where(function ($q) use ($request){
return $q->when($request->search, function ($query) use ($request){
return $query->where('first_name', 'like' , '%' . $request->search .'%')
->orWhere('last_name', 'like' , '%' . $request->search . '%');
}) ;
})->latest()->paginate(5);
$branches = Branch::all();
return view('users.index',compact('users','branches'));
}
public function create()
{
$branches = Branch::all();
return view('users.create',compact('branches'));
}
public function store(Request $request)
{
$request->validate([
'first_name'=>'required',
'last_name'=>'required',
'email'=>'required|unique:users',
'image'=>'image',
'branch_id'=>'required',
'password'=>'required|confirmed',
'permissions'=>'required|min:1',
'mobile'=>'required|min:9',
]);
$request_data = $request->except(['password','password_confirmation','permissions','image']);
$request_data['password'] = bcrypt($request->password);
if ($request->image)
{
Image::make($request->image)->resize(300,null,function($constraint){
$constraint->aspectRatio();
})->save(public_path('orbitgit_app/uploads/user_images/' . $request->image->hashName()));
$request_data['image'] = $request->image->hashName();
}
$user = User::create($request_data);
$user->attachRole('admin');
$user->syncPermissions($request->permissions);
session()->flash('success',__('site.added_successfully'));
return redirect()->route('users.index');
}
public function edit(User $user)
{
$branches = Branch::all();
return view('users.edit', compact('user','branches'));
}
public function update(Request $request, User $user)
{
$request->validate([
'first_name'=>'required',
'last_name'=>'required',
'email'=>['required',Rule::unique('users')->ignore($user->id)],
'image'=>'image',
'permissions'=>'required|min:1',
'mobile'=>'required|min:9',
]);
$request_data = $request->except(['permissions','image']);
if ($request->image)
{
if($user->image != 'default.png'){
Storage::disk('public_uploads')->delete('/user_images/' . $user->image);
}
Image::make($request->image)->resize(300,null,function($constraint){
$constraint->aspectRatio();
})->save(public_path('orbitgit_app/uploads/user_images/' . $request->image->hashName()));
$request_data['image'] = $request->image->hashName();
}
$user->update($request_data);
$user->syncPermissions($request->permissions);
session()->flash('success',__('site.updated_successfully'));
return redirect()->route('users.index');
}
public function destroy(User $user)
{
if ($user->image != 'default.png'){
Storage::disk('public_uploads')->delete('/user_images/' . $user->image);
}
$user->delete();
session()->flash('success',__('site.deleted_successfully'));
return redirect()->route('users.index');
}
}
解决方案
这可能是一个权限问题,您的 SSH 用户可以操作/home3/abuali1985/public_html/orbitgit_app/public/orbitgit_app/uploads/
文件夹及其底层图像,但服务器正在使用不同的用户运行您的应用程序并且它没有必要的权限。
SSH 到该文件夹,并确保正确的用户拥有chmod -R 775
您的应用程序在生产服务器上正常运行所需的权限或所需的最高权限。
推荐阅读
- python - 使用带有一个参数和 self 的 pool.map 在类中调用函数:TypeError:map()缺少1个必需的位置参数:'iterable'
- ruby-on-rails - Rails:调用 fork() 时可能正在另一个线程中进行
- r - 如何在 dplyr 中跨行执行操作
- vba - Excel VBA 计数日期在前一个日期的 2 周内出现的次数
- python - 正则表达式没有正确正则表达式
- javascript - 改变填充 JavaScript 的动画
- lotus-notes - 如何在传出的电子邮件中附加免责声明之类的内容?
- bash - 具有混合 shell 和 Objective C 组件的 SDK
- c# - 如何解析 JSON.NET 中的匿名数组?
- css - CSS Flexbox没有将文本框与按钮对齐?