حذف فایل های آپلود شده در body با ckeditor

1 هفته پیش
توسط سعید آپدیت شد
سعید ( 17700 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب

@ali.bayat @hossein.r.1442 @hesammousavi @elyasbeshkani @juza66 @milad @rezajashnsaz0011 @endworld @alireza.mzh @mohsenbostan @bahrami.nasrin90

سلام خدمت همگی دوستان . یه سوالی هس که خیلی درگیرش شدم.
ببینید مثلا ما یه مقاله داریم که کاربر اون رو تولید کرده ، و body مقاله با یه ادیتور نوشته شده و در متن body تعدادی فایل آپلود کرده مثلا عکس یا فیلم و ...
ببینید ما اینجا آدرس فایل ها رو در دیتابیس ذخیره نمیکنم و فقط بعد از آپلود اون ها رو به ادیتور برمیگردونیم . و اصلا فکر نکنم راهی برای ذخیره Url ها در دیتابیس هم، وجود داشته باشه چون ، باید post id هم داشته باشیم تا بفهمیم که هر Url متعلق به کدوم post هست.
در حالی که ما در حال ثبت post هستیم و هنوز اصلا post id نداریم.

حالا اگر کاربر بعد از ثبت پست و مقاله خودش ، تصمیم به حذف مقاله میگیره . در اینجا ما مقاله رو براحتی حذف میکنیم ولی یه مشکل وجود داره.

اون هم اینه که چطور میشه فایل هایی که در متن body وجود داره رو حذف کنیم. می خواهیم حذف کنیم که فضای الکی روی سرور باقی نمونه.
از طرفی url ها رو هم در دیتابیس ذخیره نکردیم که بتونیم حذفشون کنیم.

بهترین پاسخ انتخاب شده توسط سعید
سید حسین رضوی
1 هفته پیش

دقیقا تنها روش استفاده از ریجکس هست که موقع ثبت بیای آدرس فایلها رو بگیری، حالا این کارو هم میتونی موقع ثبت انجام بدی و توی یه دیتابیس اینا رو بریزی هم میتونی موقع حذف اینکارو انجام بدی تا لازم نباشه توی دیتابیس اطلاعاتی ذخیری کنی، البته یه روش دیگه هم اینه که موقعی که داره عکس رو آپلود میکنی آدرساشو یه غیر اینکه داری برای ادیتور میفرستی برای تکست باکس هم بفرستی و درآخر ذخیری کنی

سعید ( 17700 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب

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

مهدی پاکروان ( 22430 تجربه )
1 هفته پیش
تخصص : MERN STACK DEVELOPER

میتونی از Regular Expression استفاده کنی
قبل از این که مقاله کاربراتون رو توی سرور ذخیره کنید میتونید با Regular Expression یک شرط بزارین و تگ های img رو پیدا کنید و به src اون دسترسی پیدا کنید و اون رو توی سرورتون ذخیره کنید .
و هر حرکتی که خاستین با اون بزنید .
فکر کنم Regex زیر بتونه براتون کار ساز باشه

<img[^>]+src="([^">]+)"
سعید ( 17700 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب

@mahdipakravan

ممنون .
اما امیدوارم راه منطقی تری وجود داشته باشه.
اگر دوستان دیگه هم تجربیاتشون رو به اشتراک بذارن ممنون میشم.

سید حسین رضوی ( 37571 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب و طراح رابط کاربری

دقیقا تنها روش استفاده از ریجکس هست که موقع ثبت بیای آدرس فایلها رو بگیری، حالا این کارو هم میتونی موقع ثبت انجام بدی و توی یه دیتابیس اینا رو بریزی هم میتونی موقع حذف اینکارو انجام بدی تا لازم نباشه توی دیتابیس اطلاعاتی ذخیری کنی، البته یه روش دیگه هم اینه که موقعی که داره عکس رو آپلود میکنی آدرساشو یه غیر اینکه داری برای ادیتور میفرستی برای تکست باکس هم بفرستی و درآخر ذخیری کنی

سیدعلی موسوی ( 86456 تجربه )
1 هفته پیش
تخصص : سی شارپ و پی اچ پی

یکی از مشکلاتی که در Issues خود ckeditor5 اشاره کردن همین حذف فایل های توی html که کاربر تویی جدولش ذخیره میکنه.(تا جایی که کار کردم با این ادیتور راه حل مناسبی پیدا نکردم)
https://github.com/ckeditor/ckeditor5/issues/5166

از نظر برنامه نویس ها: راه های مختلفی هست برای اینکه شما لینک ها رو تویی html ذخیره کردین رو پیدا کنید یکیش دوستان اشاره کردن استفاده از ریجکس هستش.
و راه ی که اقای @hossein.r.1442 اشاره کردن که بیاین فایل های که سمت بک دریافت میکنی یک جایی دیگه ذخیره کنی که بعد بتونی با یک ایدی به همشون دسترسی پیدا کنی و map کنی و دونه دونه حذف کنی.

مهدی ( 12465 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب/اندروید

@Saeeed
به نظر من اینکار منطقی نیست. به چند دلیل
۱- اصلا حجم تصاویر مگه چقدر میشه که حالا تصاویر اضافی رو بخوای از روی سرور کم کنی موثر باشه. شما یه هاست معمولی رو سالیانه باقیمت ناچیزی اجاره میکنید و اصلا ارزش اینهمه حساسیت نداره. اگه سرور داشته باشید هم که محدودیت حجمتون کمتره و دیگه اصلا نباید نگران حجم تصاویر باشید.
۲- وجود تصاویر اضافی روی سرور تاثیری روی پردازش و درگیر شدن منابع پردازشی نداره که بخواید نگرانش باشید
۳- ممکنه یک عکس در چند مطلب مختلف استفاده شده باشه و شما به صرف اینکه یک مطلب پاک شده اقدام به حذف تصویر کنید و با اینکار به بقیه مطالب موجود هم ضربه بزنید

سید حسین رضوی ( 37571 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب و طراح رابط کاربری

@mahdidev
ببینید اول اینکه این سیستمی که ایشون فرمودند ربطی نداره که یه تصویر در چند جا استفاده شده باشه چون در هربار استفاده تصویر مجدد آپلود شده و با نامی متفاوت پس عملا با حذف یکی از تصاویر برای سایر تصاویر مشکلی پیش نمیاد، در مورد اینکه چه مقدار فضا میگره مگه بده سیستمی رو طراحی کنید که همه چیز اون عالی باشه و کوچکترین موارد رو رعایت کنید؟ تفاوت اپل با سایر شرکت ها توی چیه؟ استیو جابز به چی اهمیت میداد که الباقی اهمیت نمیدادند؟ گوشی های آیفن فک کنم 6اس که تولید شد یه تصویر گل بکگراندش بود به صورت زنده توی مقاله ای خوندم برای این تصویر یه تصویر بردار چیزی بین 30 تا 50 روز در حال تصویر برداری بوده، درصورتی که راحت میتونستند در کمتر از 8 ساعت با کامپیوتر همچون طرحی رو بزنن، پس یعنی احترام به مشتری و در درجه بالاتر احترام به خودشون برای تولید یه محصول عالی

مهدی ( 12465 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب/اندروید

@hossein.r.1442
مثال هاتون درسته ولی ربطی به مساله نداره. زمان گذاشتن برای چیزی قابل قبول هست که ارزش داشته باشه. رابط گرافیکی و جذابیت های گرافیکی ارزش دارن. ولی ۲۰ مگ روی هاست ارزش چندانی نداره.
اگر سیستمی که پیاده سازی کردن امکان استفاده مجدد از تصاویر رو نداره به نوعی نقص محسوب میشه و نسبت به یه عکس از پست حذف شده خیلی بیشتر داره حجم سرور رو تلف می کنه
ضمنا راه حل هم کامل نیست. چون شما با ریجکس تگ img رو ممکنه از تکست ادیتور دریافت کنید ولی همونطور که می دونید توی ckeditor میشه عکس رو از لینک خارجی هم درج کرد. اونوقت شما تصاویر با لینک خارجی رو هم دریافت می کنید.

در نهایت اگر خیلی اصرار به کنترل و حذف وجود داره. یه راه حل ساده اش اینه که از طریق فایل منیجر فایل های پروژه مونیتور بشه و موارد اضافی حذف بشه.

سعید ( 17700 تجربه )
1 هفته پیش
تخصص : برنامه نویس وب

@mahdipakravan @hossein.r.1442 @mahdidev
نظر همه دوستان خوبه ،
ولی بنظر من بهترین روش ای که دوستان گفتن اینه که ، آدرس فایل ها علاوه بر اینکه به ادیتور فرستاده میشه داخل یه input هم گذاشته بشه و بعد از ذخیره پست. و گرفتن ای دی پست ،
داخل دیتابیس ذخیره بشه و با یک relationship راحت میشه فایل های مربوط به اون پست رو حذف کنیم.
فکر میکنم رجیکس ، بار اضافی روی سرور هست ، مخصوصا وقتی متن body زیاد هست.
ممنون از همگی

برای ارسال پاسخ باید وارد سایت شوید