محمد صالحی
3 سال پیش توسط محمد صالحی مطرح شد
25 پاسخ

خطا آپلود فایل لاراول

با سلام
وقت بخیر
بنده در لاراول میخوام عملیات آپلود رو انجام بدم ولی با ارور زیر برخورد می‌کنم و مطالبی در موردش پیدا نکردم.
با livewire می‌خوام آپلود رو انجام بدم.
این هم ارور:

Call to a member function getClientOriginalName() on string 

کدهای قسمت کنترلر

$user = new User();
        $user->ip_id = $ip->id;
        $user->name = $this->name;
        $user->email = $this->email;
        $user->password = bcrypt($this->password);
        $photo = $this->photo;
        $photoName = Carbon::now()->timestamp . '.' . $this->photo->extension();
        $this->photo->storeAs('images', $photoName);
        $user->is_activated = 1;
        $user->is_deleted = 0;
        $user->save();

کدهای قسمت ویو(فرم):

<form wire:submit.prevent="store" class="form-horizontal" enctype="multipart/form-data">
            @csrf
            <div class="row">
                <div class="form-group col-md-3">
                    <label class="form-label" for="text-input">نام و نام خانوادگی</label>
                    <input wire:model="name" type="text" id="text-input" class="form-control"
                           placeholder="محمد صالحی">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="email-input">ایمیل (پست الکترونیکی)</label>
                    <input wire:model="email" type="email" id="email-input" class="form-control"
                           placeholder="sample@sample.com">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="password-input">رمز عبور</label>
                    <input wire:model="password" type="password" id="password-input" class="form-control"
                           placeholder="*******">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="role-input">نقش کاربر</label>
                    <select wire:model="roleSelect" id="role" class="form-control">
                        <option>نقش کاربر را انتخاب کنید ...</option>
                        @foreach($roles as $role)
                            <option value="{{ $role->id }}">{{ $role->title }}</option>
                        @endforeach
                    </select>
                </div>
            </div>
            <div class="card-footer">
                <button type="submit" wire:loading.attr="disabled" class="btn btn-success">
                    <i class="fa fa-dot-circle-o"></i>
                    ثبت
                </button>
            </div>
        </form>

لطف می‌کنید بررسی کنید
ورژن لاراول : 6


ثبت پرسش جدید
سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

سلام ورژن لایو وایر شما بسیار پایین است ( ورژن لایو وایر در حال حاضر 2.4.4 هست)
و قابلیت استفاده از wire:model در input ها با تایپ فایل در ورژن 1.2.0 اضافه شده است پس شما برای استفاده از این ویژگی و ویژگی های دیگر و بهره بری از امنیت بهتر ورژن لایو وایر رو ( با توجه به این لینک) اپدیت کنید.

@yaskabod73


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش آپدیت شد
0

سلام
خود ارور به خوبی بیان میکنه که مشکل از کجاست. getClientOriginalName() رو باید بر روی object که معمولا از request میاد اعمال کنید اما دارید روی string اعمال می کنید. احتمالا داخل کنترلر برای فراخوانی request بر روی file مشکل دارید.
@yaskabod73


محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش مطرح شد
0

ممنون از شما جناب @mohaligateway
بنده با request هم تست کردم ولی باز هم همین ارور رو داد؟!


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
0

یکبار dd روی خروجی بگیرید چه چیزی رو نمایش میده ؟
@yaskabod73


محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش مطرح شد
0

dd گرفتم خروجی یه آدرس فیک میده:
C:\fackerpath\1.jpg

@mohaligateway


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
0

کجای کد ها شما request ها رو دریافت می کنید. کد های بالا رو بررسی کردم برای مورد upload قسمتی وجود نداره. روش upload کردن فایل هاتون مشکل داره احتمالا ببینید این لینکی که دوستمون دادن مشکلتون رو حل می کنه یا نه.
@yaskabod73


محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش مطرح شد
0

سلام مجدد خدمت دوستان
بنده روش بالا رو هم تست کردم ولی باز هم همون خطا رو دریافت میکنم.
جناب @mohaligateway بنده عرض کردم با livewire دارم کار می‌کنم و Request ها از طریق wire:model فرستاده می‌شه.
اگر نیاز هست فایل کد ها را آپلود کنم.
ممنون میشم راهنمایی کنید.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
1

سلام

شما این متد رو کجا استفاده کردی؟!

getClientOriginalName()

توی این قسمت؟

  $photo = $this->photo;
        $photoName = Carbon::now()->timestamp . '.' . $this->photo->extension();

اگر اره شما باید بجای extension() اینو استفاده کنی getClientOriginalExtension()
میشه

$photo = $this->photo;
$ex = $this->photo->getClientOriginalExtension();
$photoName = Carbon::now()->timestamp . '.' . $ex;

محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش مطرح شد
0

ممنون آقای @juza66
طبق گفته شما عمل کردم. ولی دوباره همون ارور رو داد واقعاً نمیدونم چیکار باید کرد؟!
این هم کدها و ارور:

 Call to a member function getClientOriginalExtension() on string 

کد:

    public function store()
    {
        $this->validate([
            'name' => 'min:5',
            'email' => 'required|unique:users',
            'password' => 'required|min:5',
            'photo.*' => 'image|max:10240' // 1MB Max
        ]);

// Add Info Sys
        $ip = new Ip();
        $ip->ip = $this->info["ip"];
        $ip->browser = $this->info["browser"];
        $ip->operating_system = $this->info["os"];
        $ip->save();

//Add New User
        $user = new User();
        $user->ip_id = $ip->id;
        $user->name = $this->name;
        $user->email = $this->email;
        $user->password = bcrypt($this->password);

        $photo = $this->photo;
        $ex = $this->photo->getClientOriginalExtension();
        $photoName = Carbon::now()->timestamp . '.' . $ex;
        $this->photo->storeAs('images', $photoName);

        $user->is_activated = 1;
        $user->is_deleted = 0;
        $user->save();

// Add Role to User
        $user->roles()->attach($this->roleSelect);

// Photos

        $this->resetInput();
        Session::flash('add_user', 'کاربر با موفقیت اضافه گردید.');
    }

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

سلام وقتتون بخیر!

اول این کد رو بزن و نتیجه رو برام ارسال کن

return $request->file("photo");

وقتی نتیجه بالا رو گرفتی کد زیر رو تست کن و نتیجه جفتش رو برام ارسال کن

$file=$request->file("photo");
 if ($file){
    $imageName= uniqid() . "." . $file->getClientOriginalExtension();
    $file->move(public_path($path), $imageName);
}

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
0

این متغییر رو dd بگیر ببین چی برمیگردونه؟!

$this->photo

moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
1

داخل form شما قسمتی برای آپلود وجود نداره. یا من پیدا نمی کنم.🤔
@yaskabod73


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
0

@mohaligateway درسته منم پیدا نمیکنم فرض رو براین گذاشتم که اینپوت فایلش همون نامی هست که توی کدهاش نوشته :)


محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش آپدیت شد
0

ممنون از دوستان
جناب @mohaligateway کدهای سمت ویو ارسال کردم نگاه کنید ببینید مشکلی داره؟؟؟
کد سمت ویو:

 <form wire:submit.prevent="store" class="form-horizontal" enctype="multipart/form-data">
            @csrf
            <div class="row">
                <div class="form-group col-md-3">
                    <label class="form-label" for="text-input">نام و نام خانوادگی</label>
                    <input wire:model="name" type="text" id="text-input" class="form-control"
                           placeholder="محمد صالحی">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="email-input">ایمیل (پست الکترونیکی)</label>
                    <input wire:model="email" type="email" id="email-input" class="form-control"
                           placeholder="sample@sample.com">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="password-input">رمز عبور</label>
                    <input wire:model="password" type="password" id="password-input" class="form-control"
                           placeholder="*******">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="role-input">نقش کاربر</label>
                    <select wire:model="roleSelect" id="role" class="form-control">
                        <option>نقش کاربر را انتخاب کنید ...</option>
                        @foreach($roles as $role)
                            <option value="{{ $role->id }}">{{ $role->title }}</option>
                        @endforeach
                    </select>
                </div>
            </div>
            <div class="row">
                <div class="form-group col-md-3">
                    <label class="form-label" for="ip-input">آی پی</label>
                    <input type="text" value="{{ $info["ip"] }}" id="ip-input" class="form-control">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="browser-input">مرورگر</label>
                    <input type="text" value="{{ $info["browser"] }}" id="browser-input" class="form-control">
                </div>
                <div class="form-group col-md-3">
                    <label class="form-label" for="os-input">سیستم عامل</label>
                    <input type="text" value="{{ $info["os"] }}" id="os-input" class="form-control">
                </div>
                <div class="form-group col-md-3 mt-md-4">
                    <label class="form-label" for="file-input">بارگذاری تصویر</label>
                    <input wire:model="photo" type="file" id="file-input">
                </div>
            </div>

            <div class="card-footer">
                <button type="submit" wire:loading.attr="disabled" class="btn btn-success">
                    <i class="fa fa-dot-circle-o"></i>
                    ثبت
                </button>
            </div>
        </form>

جناب موسوی dd هم گرفتم و آدرس زیر بر می‌گردونه؟!!! @juza66

"C:\fakepath\01.jpg"

ممنون از آقای پارسیان همون خطای بالا رو میده @Rp76

کدهای کنترلر رو هم گذاشتم شاید اشتباهی رخ داده ممنون میشم چک بفرمایید.

class UserComponent extends Component
{
    public $data;
    public $roles, $roleSelect, $name, $info, $password, $email, $is_activated, $selected_id;
    public $photo;
    public $user_id;

    public $updateMode = false;

    public $isStatus = false;

    public function render()
    {
        $this->data = User::with('roles')->get();
        $this->roles = Role::all();

        return view('livewire.users.component');
    }

    public function mount()
    {
        $geoip = new GeoIPLocation();
        $parsed = new UserAgentParser();
        $parsed = $parsed->parse(\request()->userAgent());
        $this->info = array(
            "ip" => $geoip->getIP(),
            "browser" => $parsed->browser()->name,
            "os" => $parsed->os()->name
        );
    }

    public function status($id)
    {
        $user = User::find($id);
        $this->isStatus = !$this->isStatus;
        if ($this->isStatus) {
            $user->is_activated = 1;
            $user->save();
        }
        if (!$this->isStatus) {
            $user->is_activated = 0;
            $user->save();
        }
    }

    private function resetInput()
    {
        $this->name = null;
        $this->email = null;
        $this->password = null;
        $this->roleSelect = null;
    }

    public function store()
    {
        $this->validate([
            'name' => 'min:5',
            'email' => 'required|unique:users',
            'password' => 'required|min:5',
            'photo.*' => 'image|max:10240' // 1MB Max
        ]);

// Add Info Sys
        $ip = new Ip();
        $ip->ip = $this->info["ip"];
        $ip->browser = $this->info["browser"];
        $ip->operating_system = $this->info["os"];
        $ip->save();

//Add New User
        $user = new User();
        $user->ip_id = $ip->id;
        $user->name = $this->name;
        $user->email = $this->email;
        $user->password = bcrypt($this->password);

//        $photo = $this->photo;
//        $ex = $this->photo->getClientOriginalExtension();
//        $photoName = Carbon::now()->timestamp . '.' . $ex;
//        $this->photo->storeAs('images', $photoName);

        $user->is_activated = 1;
        $user->is_deleted = 0;
        $user->save();

// Add Role to User
        $user->roles()->attach($this->roleSelect);

// Photos

        $this->resetInput();
        Session::flash('add_user', 'کاربر با موفقیت اضافه گردید.');
    }

    public function edit($id)
    {
        $record = User::findOrFail($id);
        $roles = Role::pluck('title', 'id');

        $this->selected_id = $id;
        $this->name = $record->name;
        $this->email = $record->email;
        foreach ($roles as $role) {
            $this->roleSelect = $role;
        }

        $this->updateMode = true;
    }

    public function update()
    {
        $this->validate([
            'selected_id' => 'required|numeric',
            'name' => 'min:5',
            'email' => 'required|email',
            'password' => 'required|min:5',
            'roleSelect' => 'required'
        ]);

        if ($this->selected_id) {
            $record = User::find($this->selected_id);
            $record->name = $this->name;
            $record->email = $this->email;
            $record->password = bcrypt($this->password);
            $record->save();

            if ($this->roleSelect) {
                $record->roles()->sync($this->roleSelect);
            } else {
                $record->roles()->attach($this->roleSelect);
            }

            $this->resetInput();
            $this->updateMode = false;

            Session::flash('update_user', 'کاربر با موفقیت ویرایش گردید.');
        }
    }

    public function destroy($id)
    {
        if ($id) {
            $record = User::where('id', $id);
            $record->delete();
//            $record->update([
//                'is_deleted' => 1
//            ]);
            Session::flash('delete_user', 'کاربر با موفقیت به زباله دان منتقل گردید.');
        }
    }
}

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

اگر مشکل حل نشده
واتساپ من رو پیدا کن


محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش مطرح شد
0

ممنون از شما جناب @Rp76 ، اگه نیاز هست داخل گیت هاب ادتون کنم


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0
محمد صالحی
تخصص : برنامه نویس php
@yaskabod73 3 سال پیش مطرح شد
0

ممنون لطف کردی، اد شدی @Rp76


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

حاجی حله من ۱ ساعت دیگه میرسم شرکت چک میکنم خبرت میکنم


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

سلام شما باید این کد

use Livewire\WithFileUploads;

بالای کلاس قرار بدید

و دراولین خط کلاس این

use WithFileUploads;

را اضافه کنید .
@yaskabod73


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام