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

مشکل اپلود عکس لایو وایر در سرور

سلام
پروژه من با لاراول و لایو وایر هست و در محیط لوکال مشکلی نداشت
در تمام فرم ها عکس به درستی اپلود میشد و پیش نمایش هم نشون میداد
کد کامپوننت کلاس

 use AuthorizesRequests;
    use WithPagination;
    use WithFileUploads;
    protected $paginationTheme = 'bootstrap';
    protected $queryString= ['search'];
    public $search;
    public $brand;
    public $tasvir;

    protected $listeners = [
        'update.brands.list'  => '$refresh',
    ];

    protected $rules = [
        'brand.title' => 'required|min:3'  ,
        'tasvir'        => 'required',
    ];

    public function updated($value) // for realtime validation
    {
        $this->validateOnly($value);
    }

    public function createNewBrands()
    {
        if (! Gate::allows('create-brand')){
            $this->dispatchBrowserEvent('alert',
                ['type' => 'info',  'message' => 'شما اجازه ایجاد دسته بندی  را ندارید']);
            return ;
        }
        $this->validate(); // اگر تصویر بود آدرس تصویر گرفته شود
        if ($this->tasvir):
        $imageaddress = $this->uploadMyPhotos();
        else:
            $imageaddress = null;
        endif;

        Brand::create([
            'title'   => $this->brand['title'],
            'image'   => $imageaddress,
        ]);
        $this->emit('update.brands.list');
        $this->brand = null;
        $this->tasvir = null;
        $this->dispatchBrowserEvent('alert',
            ['type' => 'success',  'message' => 'برند مورد نظر با موفقیت ایجاد شد']);
    }

    public function uploadMyPhotos() // upload photos
    {

        $year = now()->year;
        $month = now()->month;
        $day = now()->day;
        $dir = "uploads/$year/$month/$day";
        $name  = rand(1000 , 99999) . '-' . $this->tasvir->getClientOriginalName();
        $this->tasvir->storeAs($dir  , $name);
        return "$dir/$name";
    }

    public function deleteThisBrands(Brand $brand)
    {
        if (! Gate::allows('delete-brand')){
            $this->dispatchBrowserEvent('alert',
                ['type' => 'info',  'message' => 'شما اجازه حذف برند  را ندارید']);
            return ;
        }
        $brand->delete();
        $this->emit('update.brands.list');
        $this->dispatchBrowserEvent('alert',
            ['type' => 'success',  'message' => 'برند مورد نظر با موفقیت حذف شد']);
    }

    public function render()
    {
        $this->authorize('show-brands');

        $brands = Brand::where('title' , 'LIKE' , "%{$this->search}%")
        ->latest()
        ->paginate(6);

        return view('livewire.admin.products.brands.all-brands' , compact('brands'))->layout('livewire.admin.layouts.master');
    }

کد blade

   <form wire:submit.prevent="createNewBrands" class="text-right"  >
            <div class="row">
                <div class="col-6">
                    <div class="form-group">
                        <label for="name" class="form-label">نام</label>
                        <input type="text" wire:model.debounce="brand.title" class="form-control" id="name">
                        @error('brand.title')
                        <span class="text-danger">{{ $message }}</span>
                        @enderror
                        <span wire:target="brand.title" wire:loading>
                                        <span class="spinner-border spinner-border-sm text-danger"></span>
                                    </span>
                    </div>
                </div>
                    <div class="col-6">
                            <label class="form-label" for="image">تصویر شاخص </label>

                            <input wire:model.debounce="tasvir" id="image" type="file" class="form-control">

                            <span wire:target="tasvir" wire:loading>
                                        <span class="spinner-border spinner-border-sm text-danger"></span>
                </span>
                            @error('tasvir')
                            <span class="text-danger">{{ $message }}</span>
                            @enderror
                        </div>
                        <div class="col-6">
                            @if($tasvir)
                                <img class="img-fluid" width="100" height="100" src="{{ $tasvir->temporaryUrl() }}" alt="">
                            @endif
                        </div>

                <div class="col-6">
                    <button class="btn btn-success">ایجاد brand</button>

                </div>
            </div>

        </form>

اما وقتی پروژه رو بردم روی سرور وقتی یک عکس رو انتخاب میکنم قبل از اینکه حتی بخام فرم رو سابمیت کنم اررو میده
توضیح تصویر رو وارد کنید
تمام کارهارو انجام دادم پوشه public_html رو حذف و پوشه public خودم رو به public_html تغییر نام دادم
کد appServiceProvider

   public function register()
    {
        $this->app->bind('path.public' , function(){
            return base_path() . '/public_html';
        });
    }

کد filesystem

  'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        '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'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        ],

    ],

    'links' => [
        public_path('storage') => storage_path('app/public'),
    ],

وقتی دستور php artisan storage:link را زدم این اررور رو بهم داد

توضیح تصویر رو وارد کنید

In Filesystem.php line 330:

symlink (): No such file or directory

Content-type: text / html; charset = UTF-8

وارد پوشه public_html هم شدم دستور rm storage زدم ولی اررور میده
توضیح تصویر رو وارد کنید
rm: cannot remove ‘storage’: Is a directory

لطفا راهنمایی کنید هیچ عکسی رو در سرور نمیتونم اپلود کنم
@ali.bayat @mohaligateway @Rp76 @hesammousavi @mhyeganeh


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
1

خوب خودش سوال خیلی خوبی پرسیده:

have you enabled the php_fileinfo extension?

اگر نه احتمالا باید تیکت بزنید و از پشتیبانش بخواید که فعالش کنه.


محمد
تخصص : Laravel
@mprogrammer7 3 سال پیش مطرح شد
0

فایل log رو دیدم این اررور رو داده
Unable to guess the MIME type as no guessers are available (have you enabled the php_fileinfo extension?).


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
1

خوب خودش سوال خیلی خوبی پرسیده:

have you enabled the php_fileinfo extension?

اگر نه احتمالا باید تیکت بزنید و از پشتیبانش بخواید که فعالش کنه.


محمد
تخصص : Laravel
@mprogrammer7 3 سال پیش مطرح شد
0

سلام
بله به پشتیبانی هم گفتم گفت روی همه نسخه های php فعال است
حتی با sudo nano تمام فایل های php.ini رو پیدا کردم و uncomment کردن
extension = php_fileinfo.dll
اما بازم همون اررو رو میده و همون فایل log ایجاد میشه

[2021-11-30 07:12:22] local.ERROR: Unable to guess the MIME type as no guessers are available (have you enabled the php_fileinfo extension?). {"userId":4,"exception":"[object] (Symfony\\Component\\Mime\\Exception\\LogicException(code: 0): Unable to guess the MIME type as no guessers are available (have you enabled the php_fileinfo extension?). at /home/ecomed/vendor/symfony/mime/MimeTypes.php:140)
[stacktrace]

وقتی فقط عکس رو انتخاب میکنم این اررور میاد یعنی قبل از اینکه فرم رو سابمیت کنم
temporaryfileupload لایو وایر نمیتونه فایل رو اپلود کنه
کسی میدونه دلیلش چیه؟
@mhyeganeh
@ali.bayat
@Alimotreb
@hesammousavi @mohaligateway


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

اول از uncomment بودن خط زیر اطمینان حاصل کنید:

extension=php_fileinfo.dll

بعد یکبار وب سرورتون رو ریستارت کنید تا تنظیمات جدید رو بخونه. اما اگر باز هم حل نشد:

بنا بر تجربه مشابه یک کاربر دیگه که اینجا نوشته، بجای php artisan serve سعی کنید با virtual host پروژتون رو باز کنید و مجدد تست کنید.


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

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