راکت
حل
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 :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native
@websaz5 سال پیشمطرح شد
0

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

@yaskabod73


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

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


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

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


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

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


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

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

@mohaligateway


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

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


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

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


سیدعلی موسوی
سیدعلی موسوی
تخصص :سی شارپ و پی اچ پی
@juza665 سال پیشمطرح شد
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
@yaskabod735 سال پیشمطرح شد
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
@Rp765 سال پیشمطرح شد
0

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

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

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

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

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

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

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

$this->photo

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

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


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

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


محمد صالحی
محمد صالحی
تخصص :برنامه نویس php
@yaskabod735 سال پیشمطرح شد
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
@Rp765 سال پیشمطرح شد
0

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


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

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


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

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


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

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


سبحان مولایی
سبحان مولایی
تخصص : برنامه‌نویس وب: Python :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native
@websaz5 سال پیشمطرح شد
0

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

use Livewire\WithFileUploads;

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

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

use WithFileUploads;

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


صفحه 1 از 2

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

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