PDA

View Full Version : سوال: چگونگی حذف عکس ها بعد از حذف یک خبر



naser_feb8646
یک شنبه 30 بهمن 1390, 16:13 عصر
سلام دوستان
یه سوال داشتم که امیدوارم با کمک های شما به جواب برسم
من یه سایت طراحی کردم که توش یه بخش خبر داره توی این بخش خبر از یک ادیتور استفاده شده که ما امکان آپلود تصویر تو متن خبر رو داریم یعنی یوزری که داره خبر رو برای نمایش تایپ میکنه میتونه تو متن خبر به هر تعداد عکس آپلود کنه این خبر در یک جدول تو دیتابیس ذخیره میشه که از 4 تا ستون تشکیل شده (newsId , newsDate , Subject , Context) که متن خبر توی فیلد Context ذخیره میشه و به طبع لینک عکسهای موجود در متن خبر هم توی همین فیلد هست
حالا سوال من اینجاست که چطور میتونم وقتی ادمین خواست یک خبر رو حذف کنه عکس های مربوط به اون خبر هم از روی هاست پاک بشه یا به عبارت دیگه من چطور به آدرس عکسهای موجود در متن خبر برای حذف کردن دسترسی پیدا کنم

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

naser_feb8646
دوشنبه 01 اسفند 1390, 11:37 صبح
دوستان سوال بنده هیچ راه حلی نداره؟
نمیشه کاری کرد؟
خواهشمندم اگر راه حلی داره کمکم کنید

behrad110
دوشنبه 01 اسفند 1390, 11:45 صبح
خوب روشت روش مناسبی نیست که عکس رو با متن مخلوط میکنی
عکس ها رو تو دیتا بیس تو یه جدول جداگانه که id یکتا داره ذخیره کن و به متن ات reference بده بعد هم تو onclick همون دکمه ای که متن خبر رو دیلیت میکنه یه sp رو اجرا کن که اون رکورد از جدول که حاوی عکس هست از db حذف بشه

naser_feb8646
دوشنبه 01 اسفند 1390, 13:29 عصر
خوب روشت روش مناسبی نیست که عکس رو با متن مخلوط میکنی
عکس ها رو تو دیتا بیس تو یه جدول جداگانه که id یکتا داره ذخیره کن و به متن ات reference بده بعد هم تو onclick همون دکمه ای که متن خبر رو دیلیت میکنه یه sp رو اجرا کن که اون رکورد از جدول که حاوی عکس هست از db حذف بشه

ممنون دوست من
ولی عکس های من توسط خود ادیتور آپلود میشه من چطور میتونم به آدرس عکسها در متن ادیتور دسترسی پیدا کنم

behrad110
دوشنبه 01 اسفند 1390, 14:07 عصر
ممکنه این قابلیت رو editor در اختیار شما قرار بده ولی این دلیل نمیشه شما کل محتوی content رو بفرستی تو دیتا بیس شما خودت میتونی یه modalpopup درست کنی و اونجا عکس رو بگیری و به صورت مجزا در db ذخیره کنی در ضمن میتونی کپشن هم به عکس هات اضافه کنی که قابلیت سرچ با نام هم داشته باشه.
به هر حال به نظر من در هیچ حالتی مخلوط کردن متن با عکس پذیرفته نیست .این نظر منه شاید اشتباه میکنم
البته این بستگی به ادیتور شما هم داره که ما نمیدونیم چه جوری کار میکنه اگر کامپوننت خاصی هست . اما من فکر میکنم اون رو در یک پوشه ذخیره بکنه به هر حال اگه componentرو upload کنید بتونیم از کارش سر در بیاریم

fakhravari
دوشنبه 01 اسفند 1390, 15:03 عصر
فکر نکنم این قابلیت باشه.
چون شما عکس را در ادیتور در هنگام تایپ اضافه میکنید به html تبدیل میشه و ادرس عکس را جایی نداریم که بعد حذف کنیم.:متفکر:

crazy_1892
دوشنبه 01 اسفند 1390, 15:54 عصر
دوست عزیز اگه نام عکس را داشته باشی به صورت زیر می تونی حذف کنی




if (String.Empty != TextBox1.Text.Trim())
{
DataClassesDataContext Cld = new DataClassesDataContext();
Article Tbl = Cld.Articles.Single(n => n.Id == int.Parse(TextBox1.Text.Trim()));
try
{
System.IO.File.Delete(Server.MapPath("../Upload/" + Tbl.Dl1));

}
catch { }
Tbl.Dl1 = "هیچ گونه فایلی دخیره نشده است";
Cld.SubmitChanges();

}

mehdi-ghafari
دوشنبه 01 اسفند 1390, 16:15 عصر
سلام. من کدش رو نمیدونم چطوری مینویسن ولی فکر کنم روشش رو بدونم
با درج عکس از طریق ادیتور تو مد HTML یه تگ img اضاف میشه که آدرس تصویر آپ شده هم تو صفت srcش هست.
حالا شما وقتی خواستی خبر رو حذف کنی یه دور تو متن خبر (همون فیلد Context دیتابیس) سرچ کن و آدرسهایی که بین کاراکترهای <img و /> هست رو پیدا کن بعد تصویر رو حذف کن.
امیدوارم روشش رو درست گفته باشم. این چیزی بود که به ذهنم رسید

مهدی کرامتی
دوشنبه 01 اسفند 1390, 16:17 عصر
با استفاده از Html Agility Pack (http://htmlagilitypack.codeplex.com/) می توانید عناصر از نوع خاصی را از HTML ای که ادیتور فوق تولید می کند بیرون بکشید. مثال:



HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(txtHtml.Text);

// Targets a specific node
HtmlNode someNode = document.DocumentNode;

// If there is no node with that Id, someNode will be null
if (someNode != null)
{
// Extracts all links within that node
IEnumerable<HtmlNode> allLinks = someNode.Descendants("img");

// Outputs the href for external links
foreach (HtmlNode link in allLinks)
{
// Checks whether the link contains an HREF attribute
if (link.Attributes.Contains("src"))
{
lstTargetTags.Items.Add(link.Attributes["src"].Value);
}
}
}

سپس در foreach با استفاده از Path.GetFilename() مسیر فایل ها بر روی سرور را روی مقادیر صفت src به دست آورده و آنها را با دستور File.Delete حذف کنید.

مثال اجرای تحت Windows Forms:
82988