راکت
حل شده

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

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

محمد
محمد
@mprogrammer7
ثبت پرسش جدید

پاسخ‌ها

4
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

بهترین پاسخ

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

have you enabled the php_fileinfo extension?

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

محمد
محمد
@mprogrammer7

تخصص: Laravel

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

محمد
محمد
@mprogrammer7

تخصص: Laravel

سلام
بله به پشتیبانی هم گفتم گفت روی همه نسخه های 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

شاید پاسخ شما همین‌جا باشد

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

extension=php_fileinfo.dll

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

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

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

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