سعید
4 سال پیش توسط سعید مطرح شد
11 پاسخ

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

@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 ها رو هم در دیتابیس ذخیره نکردیم که بتونیم حذفشون کنیم.


ثبت پرسش جدید
سید حسین رضوی
تخصص : برنامه نویس وب و طراح رابط کار...
@hossein.r.1442 4 سال پیش مطرح شد
1

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


سعید
تخصص : برنامه نویس وب
@Saeeed 4 سال پیش مطرح شد
0

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


مهدی پاکروان
تخصص : Mernstack Developer
@mahdipakravan 4 سال پیش مطرح شد
1

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

<img[^>]+src="([^">]+)"

سعید
تخصص : برنامه نویس وب
@Saeeed 4 سال پیش مطرح شد
0

@mahdipakravan

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


سید حسین رضوی
تخصص : برنامه نویس وب و طراح رابط کار...
@hossein.r.1442 4 سال پیش مطرح شد
1

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


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
1

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

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


مهدی سمیعیان
تخصص : برنامه نویس وب/اندروید
@mahdidev 4 سال پیش مطرح شد
1

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


سید حسین رضوی
تخصص : برنامه نویس وب و طراح رابط کار...
@hossein.r.1442 4 سال پیش مطرح شد
0

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


مهدی سمیعیان
تخصص : برنامه نویس وب/اندروید
@mahdidev 4 سال پیش مطرح شد
1

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

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


سعید
تخصص : برنامه نویس وب
@Saeeed 4 سال پیش مطرح شد
0

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


روح اله
تخصص : برنامه نویس
@roohollah.azari 4 سال پیش مطرح شد
0

سلام دوستان راه های مختلفی هست. من خودم سورس ادیتور رو در دیتابیس ذخیره کردم یعنی بصورت قالب html ذخیره کردم.
موقع خوندن دیتابیس هم از طریق DomDocument تگ های img رو درمیارم و سورسشونو میخونم
ولی نمیدونم چرا حذف نمیشه عکس ها باتوجه به اینکه متد اپلود ckeditor فقط با متد asset مقداردهی میشه url اش در بقیه موارد خطا میده(مثل public_path,...) الان هم با هیچ دستوری فایل مذکور شناسایی نمیشه؟ البته permision برای پوشه هایی که داخل اون اپلود میشن 0755 هست ولی Permision برای فایل های اپلود شده 0666 هستن . مشکل از کجاست چطوری پرمیشن ها رو ست کنم رو 0755 و اصلا مشکل از پرمیشن هست یا نه؟
با File::Delete,unlink تست کردم جواب نداده
لطفا راهنمایی کنید دوستان


بهرام
تخصص : Laravel Developer
@bahram 4 سال پیش آپدیت شد
1

@mahdidev
منم با نظر دوستمون موافقم
شما برای ادیتور میتونید از filemanager استفاده کنید که از یه عکس بتونید در هرجای پروژه استفاده کنید همچنین هر عکسی که نخواستید رو هم با خود اون پکیج براحتی میتونید پاک کنید.


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

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