راکت

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

4 پاسخ

سلام دوستان
من عکس هامو در دیتابیس به صورت 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
ثبت پرسش جدید

پاسخ‌ها

4
مرضیه
مرضیه
@marziehkhani

تخصص: طراح رابط کاربری،برنامه‌نویس

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

علیرضا
علیرضا
@alirezashekofteh

تخصص: برنامه نویس

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

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

سبحان دادخواه
سبحان دادخواه
@SobhanDadkhah

تخصص: دانشجوی برنامه نویسی :)

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

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

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

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

تخصص: Full-Stack Web Developer Freelancer

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

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

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

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