【问题标题】:Cannot Change Images after publishing my project Laravel 5.7发布我的项目 Laravel 5.7 后无法更改图像
【发布时间】:2020-02-26 15:20:02
【问题描述】:

我已经在 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');
    }
}

【问题讨论】:

  • 您使用带有图像的表单吗?这是一个ftp问题?这是表单的上传部分吗?是移动文件吗?你有产生错误的代码吗?
  • 我用错误页面的代码编辑了我的帖子,我说它在本地主机上工作得很好,但是在我发布它之后,我为公共文件夹内容创建了两个文件夹(orbitgit)和(orbitgit_app)没有公用文件夹的所有项目文件
  • @MohamadSalama 你能分享你的filesystems.php 配置文件和你负责图像存储的控制器代码
  • @Foued MOUSSI 完成

标签: laravel


【解决方案1】:

这可能是一个权限问题,您的 SSH 用户可以操作 /home3/abuali1985/public_html/orbitgit_app/public/orbitgit_app/uploads/ 文件夹及其底层图像,但服务器正在使用其他用户运行您的应用,并且它没有必要的权限。

SSH 到该文件夹​​并确保正确的用户拥有chmod -R 775 的权限或您的应用在生产服务器上正常运行所需的最高权限。

【讨论】:

  • 完成,但我得到同样的错误,但上传文件夹现在不在 orbitgit_app 文件夹中,它与公用文件夹一起移动到 orbitgit 文件夹中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多