PDA

View Full Version : نمايش فايل ذخيره شده در ديتابيس



MR.Karami
چهارشنبه 30 دی 1388, 14:48 عصر
با سلام

من در ديتابيس نام فايل و محتواي فايل با پسوندهاي مختلف به صورت باينري ذخيره ميكنم حالا ميخوام بدون اينكه كاربر فايل رو دانلود كنند ابتدا محتواي فايل رو به كاربر نشان بده ؟


باتشكر :لبخندساده:

mehdi.mousavi
چهارشنبه 30 دی 1388, 15:09 عصر
با سلام من در دیتابیس نام فایل و محتوای فایل با پسوندهای مختلف به صورت باینری ذخیره میکنم حالا میخوام بدون اینکه کاربر فایل رو دانلود کنند ابتدا محتوای فایل رو به کاربر نشان بده ؟ باتشکر :لبخندساده:

سلام.
فایلها تایپشون چیه؟


اگر فایل PDF هستش، خوب میتونید از یک PDF Viewer Control برای اینکار استفاده کنید.
اگر فایل صوتی هستش، میتونید از Real Streaming استفاده کنید.
اگر فایل تصویری هستش، میتونید با تغییر Content Type اونو یه ضرب به Client بفرستید.
اگر فایل Text هست، بازم میتونید با تغییر Content Type اونو به Client گسیل کنید.
...

موفق باشید.

پاورقی: من فرض کردم در مورد Web App ها صحبت میکنید چون نوشته اید بدون دانلود کردن فایلها!

MR.Karami
چهارشنبه 30 دی 1388, 18:29 عصر
هرنوع فایلی میتونه باشه مانند (word,Pdf,jpg,bmp,...)
آیا روشی هست که به شه فایلها رو نشون داد.
درضمن web نیست application هست

seven7777777
چهارشنبه 30 دی 1388, 18:45 عصر
خوب برا اینکار که بای اول فایل رو از روی Stream ذخیره شده تو دیتابیست بسازی . فکر نمی کنم بدون اینکار بتونی نمایشش بدی .
برای اینکار هم باید پسوند هر فایل رو بدونی . بعد byte[] هاش رو بخونی و با اون پسوند یه فایل موقت براش مثلا تو tmp بسازی و بعد هم اجراش کنی تا کاربر ببینه .

MR.Karami
چهارشنبه 30 دی 1388, 20:05 عصر
ممنون از پاسخ دوستان

همان طور كه دوست عزيز گفتند راهي براي اين كار نيست اگه هم باشه مشكل هست (من كه راهي پيدا نكردم) بهترين كار و آسان ترين اينه كه يه پوشه به نام tmp بسازم و پس از ذخيره فايل داخل پوشه آن را اجرا كردم

mehdi.mousavi
پنج شنبه 01 بهمن 1388, 14:28 عصر
ممنون از پاسخ دوستان. همان طور که دوست عزیز گفتند راهی برای این کار نیست اگه هم باشه مشکل هست (من که راهی پیدا نکردم) بهترین کار و آسان ترین اینه که یه پوشه به نام tmp بسازم و پس از ذخیره فایل داخل پوشه آن را اجرا کردم

احسنت! اینجا بر می گردیم به سوالی که در وهله اول باید می پرسیدم. به چه دلیل فایلها رو درون بانک ذخیره می کنید؟ می دونید این مساله چه بار زیادی روی RDBMS میذاره؟ در صورتیکه می تونستید روی File System براحتی فایلها رو از همون ابتدا در پوشه ای خاص نگهداری کنید.

seven7777777
پنج شنبه 01 بهمن 1388, 18:39 عصر
من هم دارم یه همچین چیزی می نویسم و به خاطر امنیتش و اینکه فکر کردم بک آپ گیریش تو db راحت تره ، اونجا ذخیره می کنم .
یعنی به نظر شما بهتره توی system files کار بشه ؟ فقط به خاطر اینکه برای نمایش اون به کاربر باید از روی stream فایل اصلی رو ساخت . پس اصل چرا یه همچین قابلیتی برای ذخیره تو sql هست ؟؟؟

MR.Karami
شنبه 03 بهمن 1388, 13:15 عصر
نظر شما درسته ولي اگر فايلهاي ما روي سيستم ديگه ايي باشه و به اون سيستم دسترسي نداشته باشم مثلا سيستم خراب شده باشه آن وقت بهتر نيست كه فايلهامون ذخيره شده باشد تا از بين رفتن آن جلوگيري بكنيم در ضمن بعداز مدتي حجم File System بالا ميره كه فضاي زيادي اشغال مي كنه و نيز اگر اطلاعات ما امنيتي باشند آن وقت همه به آن دسترسي دارند ولي در ديتابيس ميتوان كاربري كه وارد شده محدود كرد

اگرمنظورتون درست متوجه شده باشم.

mehdi.mousavi
شنبه 03 بهمن 1388, 14:03 عصر
سلام.
اگر حجم فایلهایی که میخواهید ذخیر کنید کم هستن، مانعی نداره اونها رو در بانک نگهداری کنید. اما اینکه بخواهید فایلهای صوتی و تصویری و ویدئویی و ... رو در بانک نگهدارید، ایده جالبی نیست چرا که بار عظیمی روی RDBMS میذاره و اصلا مقرون به صرفه نیست.

ممکنه بگید "یکپارچگی سیستم" با نگهداری فایلهای روی FS به خطر می افته و از بین میره، یا برای Backup گرفتن دچار مشکل خواهیم شد، یا اینکه امنیت سیستم بخطر میفته، یا نگران Fault Tolerant نبودن سیستم باشیم و ...

اما برای هر کدوم از این مباحث، راه حلی وجود داره. میتونید Backup گرفتن رو با Script هایی انجام بدید که وظیفه Backup گرفتن از بانک و فایلهای موجود در فلان Partition رو بعهده دارن. در مورد Fault Tolerant بودن میتونید از Backup Server استفاده کنید و درخواستها رو توسط سیستم دیگه ای پاسخ بدید. درست همونطوریکه اگر RDBMS از کار بیفته، میخواهید با استفاده از یک RDBMS پشتیبان مابقی درخواستها رو پاسخگو باشید. در مورد امنیت هم نمیتونیم (و نباید) بدون Threat Modeling صحبت کنیم. این مبحث، موضوعی هستش که باید با دقت فراوان به اون وارد شد... اما بهتون اطمینان میدم که اگر درست انجام بشه، هرگز چیزی برای نگرانی در این مورد نیز وجود نخواهد داشت.

اما برگردیم به حالتیکه Data Stream رو در بانک میخواهید نگهداری کنید. اگر از SQL Server 2008 استفاده میکنید، یه نگاهی به FileStream Storage (http://msdn.microsoft.com/en-us/library/cc949109.aspx) بندازید. این، سرویس جدیدی هستش که البته من در موردش اطلاعات چندانی ندارم (هنوز فرصت نکردم بخونم) اما ظاهرا برای پاسخ دادن به چنین نیازی طراحی شده.

در هر حال، اگر و تنها اگر FileStream Storage برای اینکار نباشه، بهتون توصیه میکنم که فایلها رو روی HDD نگهداری کنید و آدرس به اونها رو (بصورت Relative) توی بانک نگهدارید.

موفق باشید.