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

ذخیره عکس به صورت json

سلام دوستان
من عکس هامو در دیتابیس به صورت json دخیره میکنم
و از bootstrap multiselect file upload استفاده میکنم برای آپلود تا اینجا مشکلی نیست
و عکس ها به صورت json ذخیره میشه مشکلی که دارم اینه که من هرچندتا عکس آپلود میکنم در دیتابیس به این شکل هست

["1608042292.jpeg","1608042292.jpeg"]

در اینجا دوتا عکس آپلود شده ولی اسماشون یکی میافته و در واقع فقط یک عکس در پوشه اپلود میشه با دو اسم در دیتابیس
فایل store من در کنترلر

  public function store(Request $request)
    {
        if($request->hasfile('photo'))
        {
            foreach($request->file('photo') as $file)
            {
                $name = time().'.'.$file->extension();
                $file->move(public_path().'/photo/tourism/', $name);
                $data[] = $name;
            }
        }
        $file= new Tourism();
        $file->photo=json_encode($data);
        $file->save();
        return redirect('/AdminCp/ژity');
    }

فرم view

 <form class="form0reg row" method="post" action="{{ route("Tourism.store")}}" enctype="multipart/form-data">
                @csrf
                <div class="col-md-12">
                    <h6 class="text-right h-color">سایر عکس ها&nbsp;<span
                            class="span-color">(اختیاری)</span></h6>
                    <div class="file-loading">
                        <input id="file-1" type="file" name="photo[]" multiple
                               class="file form-control"
                               data-overwrite-initial="false"
                               data-min-file-count="1">
                    </div>
                </div>
                <div class="col-sm-12 text-left">
                    <button type="button"
                            onclick="document.getElementsByClassName('form0reg')[0].submit()"
                            class="btn btn-successs">ویرایش مطلب</button>
                </div>
            </form>

ممکنه راهنماییم کنید مشکل از کجاست حتی روش آپلودم عوض کردم ولی همین مشکل پابرجا بود
در دیتابیس هم ستون photo که عکس ذخیره میشه از نوع varchar هست


ثبت پرسش جدید
مرضیه
تخصص : طراح رابط کاربری،برنامه‌نویس
@marziehkhani 3 سال پیش مطرح شد
0

@hesammousavi
میشه راهنماییم کنید آقای موسوی🙏


علیرضا
تخصص : برنامه نویس
@alirezashekofteh 3 سال پیش مطرح شد
1

سلام خانم چون دارید برای نام گزاری از time() استفاده می کنید چون دستورات در کسری از ثانیه انجام میشه اسم هر دو عکس یکی میشه بهتره از تابع rand()استفاده کنید که رندوم هر سری یک عددی برای عکس در کنار time()تولید کند


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

@bahar
سلام. به دلیل تفسیر شدن کد با سرعت بالا تابع time زمان یکسانی رو برمیگردونه. راه های خیلی زیادی هست برای اینکه اعداد رندوم استفاده کنید که تداخلی بین اسم فایلها نباشه.
اما یه راه خیلی ساده و کوتاه به نظرم این هست که شماره ایندکس آیتمتون رو یه تایم بچسبونید.مثلا:

    foreach($request->file('photo') as $key => $file)
    {
        $name = time().$key.'.'.$file->extension();
        $file->move(public_path().'/photo/tourism/', $name);
        $data[] = $name;
    }

ولی فکر نمیکنم روش خیلی جالبی باشه ( کثیفه 😅 ). راهی هست که فی البداهه به ذهن رسید.


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

همون طوری که دوستان اشاره کردند بجای تابع time() بایستی از تابعی استفاده کنید مطمئن باشید هر سری که اجرا میشه مقدار متفاوتی تولید کنه. یکی از بهترین جایگزین هاش هم به نظرم تابع uniqid() هست که بصورت خاص برای این جور مواقع تعبیه شده.

$name = uniqid().'.'.$file->extension();
//خروجیش میشه یک چیزی مثل این: 
// 5fd9126be7818.jpg

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

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