راکت
حل شده

مشکل در نمایش ویدئو و تصویر

4 پاسخ

سلام تو یه بخش از سایتم میخام اگه ویدئو گذاشتم ویدئو نمایش بده و اگه عکس گذاشتم عکس نمایش بده
دو تا فیلد تعریف کردم
image
video
دیفالت رو nullabel گذاشتم حالا هر کدوم خواستم اپلود میکنم

فقط نمیدونم تو بلید به چه شکل شرط بزارم

  @if (اینجا نمیدونم چی بزارم)
                 <img src="{{ $news->image }}" alt="" class="img-fluid">
            @else
                <video width="500" controls preload>
                    <source src="{{ $news->video }}" type="video/mp4">
                </video>
            @endif

تو کنترلر به این شکل نوشتم ایراد داره ؟دیتا ثبت شد و اکیه فقط میخام بدونم مشکلی نداشته باشه

        auth()->user()->news()->create($request->all());

یا به این شکل بنویسم ؟چون ویدئو هم هست نمیدونم به این روش چطوری بنویسم

 if($request->hasFile('image')) {

                $file = $request->file('image');
                $ext = $file->getClientOriginalExtension();
                $file_name = auth()->user()->id . '_' . time() . '.' . $ext;
                $file->storeAs('/', $file_name, 'files');

                $data['image'] = $file_name;
             }

            auth()->user()->update($data);
ثبت پرسش جدید

پاسخ‌ها

4
Banana Life
Banana Life
@shift.delete
بهترین پاسخ

@codeLover
نمیدونم جدول دیتا شما برای ذخیره فایل تان به چه شکلی است ولی برای فرض مثال میشه همچین چیزی

Banana Life
Banana Life
@shift.delete

سلام
دوست عزیز مشکل شما را میشه به روش های مختلف حل کرد؛ شما میتونید یه فیلد دیگه بر اساس اسم فایل عکس یا فیلم درست کنید و به راحتی بر اساس نوع فایل یکی از ان ها را نمایش بدید.
دستور شرطی برای نمایش اگر مقدار nullabel باشه:

@if (fileName == null)
        @if (fileName == img)
            <img src="{{ $news->image }}" alt="" class="img-fluid">
        @else
            <video width="500" controls preload>
                 <source src="{{ $news->video }}" type="video/mp4">
            </video>
    @else
       <div></div>
    @endif

دستور شرطی برای نمایش اگر مقدار nullabel نباشه:

@if(fileName == img)
        <img src="{{ $news->image }}" alt="" class="img-fluid">
    @else
        <video width="500" controls preload>
            <source src="{{ $news->video }}" type="video/mp4">
        </video>
    @endif
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@shift.delete
ممنونم از شما 🌹
فیلد دیگه از نوع boolean باشه ؟
یا از طریق mime type منظورتونه ؟
بیشتر توضیح میدید؟

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

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@shift.delete
ممنونم
پس نیاز به دو فیلد یکی برای اسم فایل یکی پسوند فایل هست درسته ؟

من به این شکل نوشتم درسته ؟

        $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->string('name');
            $table->string('slug')->unique();
            $table->tinyInteger('status');
            $table->text('description');
            $table->string('filePath');
            $table->string('fileName');
            $table->timestamps();

کنترلر

       $request->validate([
            'name' => 'required',
            'slug' => 'unique:counselings',
            'status' => '',
            'description' => 'required',
            'filePath' => 'required',
            'fileName' => ['mimetypes:video/mp4,image/jpeg,image/png,image/gif,audio/mp3,audio/mpeg']
        ]);

        if (empty($request->slug)) {
            $slug = SlugService::createSlug(Counseling::class, 'slug', $request->name);
        } else {
            $slug = SlugService::createSlug(Counseling::class, 'slug', $request->slug);
        }
        $request->merge(['slug' => $slug]);

        if($request->hasFile('filePath')) {
            $files = $request->file('filePath');
            $ext = $files->getClientMimeType();
            $file_name = auth()->user()->id . '_' . time() . '.' . $ext;
            $files->storeAs('/', $file_name, 'files');

            $data['filePath'] = $file_name;
         }

        auth()->user()->news()->create($request->all());

اینجا filename به چه صورت ذخیره کنم تو دیتابیس ؟ این روش اشتباه درسته ؟

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

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