PDA

View Full Version : روشی برای ذخیره سازی و بازیابی image,pdf,txt,...



hamzeh241
چهارشنبه 02 شهریور 1390, 09:23 صبح
با سلام خدمت دوستان
من یه روش برای ذخیره وبازیابی اسناد رو آموزش میدم حالا اگر مبتدیانه یا ناقص بود اساتید به بزرگی خودشون ببخشن.
گام اول تویه دیتا بیس خودتون یک جدول بساید و یک فیلد از نوع Image و یه فیلد از نوع navarchar تعریف کنید
74283
گام دوم
یه FileUpload و یه button تو صفحه تون بزارید
74284
حالا برید رو پوشه app.code راست کلیک بکنید و add new item رو انتخاب کنید و از پنجره باز شد یه linq to sql classes به پروژتون add کنید
74285
حال برید تو sever explorer و با نجام مراحل تصویر زیر database تون رو به اضافه کنید
74286
خوب طبق شکل زیر جدول مورد نظر رو به data context تون اضافه کنید(drag & drop کنید)
74287
حالا برید به صحفه aspx تون و تو رویداد کلیک دکمه آپلود فایل کد زیر رو بنویسید
protected void Button1_Click(object sender, EventArgs e)
{
DataClassesDataContext db=new DataClassesDataContext();
TbAttacheDocument tb = new TbAttacheDocument();
tb.ContentType = FileUpload1.PostedFile.ContentType;
tb.AttacheDocument = FileUpload1.FileBytes;
db.TbAttacheDocuments.InsertOnSubmit(tb);
db.SubmitChanges();

}
خوب تا حالا فیلمون رو ذخیره کردیم. فقط دوستان توجه کنید اسم گذاری من با شما فرق داره شما اسم datacontext و table و فیلد خودتون رو با مال من جاگذاری کنید(copy و past مطلق نکنید)
حالا برای باز یابی یه button یا link button بزارید و تو رویداد کلیکش یه کد اینجور بنویسد
protected void LinkButton1_Click(object sender, EventArgs e)
{
byte[] FileContent = new byte[0];
string contenttype = "";
DataClassesDataContext db = new DataClassesDataContext();
var q = db.TbAttacheDocuments.Where(q1 => q1.IdAttacheDocuments == 1).Select(q1 => new { q1.AttacheDocument, q1.ContentType });
foreach (var row in q)
{
if (!string.IsNullOrEmpty(row.ContentType))
contenttype = row.ContentType.Trim();
Filecontent = row.Logo.ToArray();
}
if (!string.IsNullOrEmpty(contenttype))
Response.ContentType = contenttype;
if (FileContent.Length > 0)
Response.BinaryWrite(FileContent);
//else
// Show("فايل وجود ندارد");
}
من ایدی اولین رکورد بهش دادم شما ایدی هر رکورد رو که می خواید بهش بدید.
در آخر می گم که این روش کاملی نیست ولی تو بعضی موقع کارو خیلی راه میندازه

Saman Hashemi
چهارشنبه 02 شهریور 1390, 09:35 صبح
بابت آموزشي كه قرار داديد ممنون اما به چندتا نكته ميخوام توجه كنيد...!
دوست عزيز به نظر شما منطقيه كه فيلم ببريم بريزيم تو بانك؟هميشه هر راه حلي خوب نيست حتي اگر جواب پس داده باشه اين روش شايد تا حدودي از نظر امنيت پيشنهاد بشه اما از نظر كارايي به هيچ عنوان پيشنهاد نميشه چون با سنگين شدن بانك سرعت كاهش پيدا ميكنه شما ميتونيد اين فايل توي يه فولدر قرار بديد و دسترسي مدير و ... بهش اختصاص بديد و فايل هارو توش آپلود كنيد و تنها آدرس فايل هارو توي بانك نگهداريد و در صورت نياز از طريق آدرس فردي كه احراز هويت شده ميتونه به فايل دسترسي پيدا كنه...!

hamzeh241
چهارشنبه 02 شهریور 1390, 10:01 صبح
دوست من چندتا نکته
1- حجم فایل آپلودی رو می تونی تو web.config نتظیم کنی(خودش رو 4 مگابایته)
2- آدرس فیزیکی رو تو دیتا بیس ذخیره کنی!:متعجب: تو سرور محلی جواب میده ولی تو سرور جهانی مغر سرور هنگ می کنه و یه خطا توپ میده
3- حجم هاست ما برای فایل هامون محوده واضافه کردن یه فایل جدید زمان بر و هزینه بره ولی حجم دیتابیس نامحدوده!!

Saman Hashemi
چهارشنبه 02 شهریور 1390, 10:09 صبح
آدرس فیزیکی رو تو دیتا بیس ذخیره کنی!:متعجب: تو سرور محلی جواب میده ولی تو سرور جهانی مغر سرور هنگ می کنه و یه خطا توپ میده
دقيقا برعكس عرض كرديد آدرس فيزيكي مگه چيه كه سرور بخواد هنگ كنه يه رشته است ديگه...!

حجم هاست ما برای فایل هامون محوده واضافه کردن یه فایل جدید زمان بر و هزینه بره ولی حجم دیتابیس نامحدوده!!
حجم ديتابيسم محدود و در بيشتر پلان ها خيلي كمتر از فضايي كه در اختيار شما قرار ميدهند،اضافه كردن يه فايل به هاست هزينه بر و زمانبره(...!) اما افزايش بانك به صرفه است؟
دوست عزيز بيشتر تحقيق كن...!

ASPX
چهارشنبه 02 شهریور 1390, 11:12 صبح
آدرس فیزیکی رو تو دیتا بیس ذخیره کنی! تو سرور محلی جواب میده ولی تو سرور جهانی مغر سرور هنگ می کنه و یه خطا توپ میده

دوست عزیز @hamzeh241 شاید شما فکر کردید ما میخواهیم آدرس و مثلا به صورت

c:\\file\1.txt بدیم؟ مسلما اینطور نیست. و فقط چیزی شبیه به
file\1.txt ذخیره میشه و مابقی با /~ حله تازه حتی لزومی به این کار هم نیست با طراحی درستی از بانک حتی میشه از id رکوردی که ذخیره شده برای این کار استفاده کرد


حجم هاست ما برای فایل هامون محوده واضافه کردن یه فایل جدید زمان بر و هزینه بره ولی حجم دیتابیس نامحدوده!!
خیلی از هاست ها فقط 10 درصد فضاشون رو sql میدهند. مثلا ایران هاست.

hamzeh241
چهارشنبه 02 شهریور 1390, 11:53 صبح
دقيقا برعكس عرض كرديد آدرس فيزيكي مگه چيه كه سرور بخواد هنگ كنه يه رشته است ديگه...!

حجم ديتابيسم محدود و در بيشتر پلان ها خيلي كمتر از فضايي كه در اختيار شما قرار ميدهند،اضافه كردن يه فايل به هاست هزينه بر و زمانبره(...!) اما افزايش بانك به صرفه است؟
دوست عزيز بيشتر تحقيق كن...!

گفتی :"دقيقا برعكس عرض كرديد آدرس فيزيكي مگه چيه كه سرور بخواد هنگ كنه يه رشته است ديگه...! "نه عزیز دل منظورم وقتی که بخواد به اون ادرسی که ذخیره کردی دسترسی پیدا کنی بود.
دوست من جایی مثل پرشین سرویس دیتا بیسش جدا از هاستشه در این صورت حجم دیتا بیسش نا محدوده. گفتی:اضافه كردن يه فايل به هاست هزينه بر و زمانبره(...!) اما افزايش بانك به صرفه است؟ شما دارید یه سایت کاملاً استاتیک رو در نظر می گیری فرض کن شما سایت رو آپلود کردی و pdf برای help گذاشتی حالا می خوای یه چیزایی بهش اضافه کنی و حجم هاست در اختیارت 1گیگ باشه حالا بعد از تغییر pdf وقتی خواستی بزاریش رو هاست می بینی حجمم سایتت از 1گیگ گذشته حالا می خوایی چیکار کنی؟!!
ممنون از محبتت که اینقدر به فکر علم منی حتماً بیشتر تحقیق می کنم.:چشمک:

eof_programming
چهارشنبه 02 شهریور 1390, 11:59 صبح
دوست عزیز @hamzeh241 شاید شما فکر کردید ما میخواهیم آدرس و مثلا به صورت

c:\\file\1.txt بدیم؟ مسلما اینطور نیست. و فقط چیزی شبیه به
file\1.txt ذخیره میشه و مابقی با /~ حله تازه حتی لزومی به این کار هم نیست با طراحی درستی از بانک حتی میشه از id رکوردی که ذخیره شده برای این کار استفاده کرد


خیلی از هاست ها فقط 10 درصد فضاشون رو sql میدهند. مثلا ایران هاست.

داداش جون مشکل سر \\ یا \ نیس. هیچ هاستی اجازه ایجاد فایل بعد از آپلود سایتو نمیده. اوکی؟!!!!!!!!!!!!

hamzeh241
چهارشنبه 02 شهریور 1390, 11:59 صبح
دوست عزیز @hamzeh241 شاید شما فکر کردید ما میخواهیم آدرس و مثلا به صورت

c:\\file\1.txt بدیم؟ مسلما اینطور نیست. و فقط چیزی شبیه به
file\1.txt ذخیره میشه و مابقی با /~ حله تازه حتی لزومی به این کار هم نیست با طراحی درستی از بانک حتی میشه از id رکوردی که ذخیره شده برای این کار استفاده کرد


خیلی از هاست ها فقط 10 درصد فضاشون رو sql میدهند. مثلا ایران هاست.
دوست عزیز من رو ایران هاست این کارو نکردم من رو پرشین سرویس امتحان کردم. شما هم مثل دوستمونSaman Hashemi (http://barnamenevis.org/member.php?160262-Saman-Hashemi)سایت رو کاملاً استاتیک در نظر می گیری . من با // یا / مشکل ندارم من با نحوه modify مشکل دارم.

Saman Hashemi
چهارشنبه 02 شهریور 1390, 12:37 عصر
دوست عزيز باور كن من يكي نميگيرم چرا يكي به ميخ ميزني يكي به تخته؟

گفتی :"دقيقا برعكس عرض كرديد آدرس فيزيكي مگه چيه كه سرور بخواد هنگ كنه يه رشته است ديگه...! "نه عزیز دل منظورم وقتی که بخواد به اون ادرسی که ذخیره کردی دسترسی پیدا کنی بود.
دوست من جایی مثل پرشین سرویس دیتا بیسش جدا از هاستشه در این صورت حجم دیتا بیسش نا محدوده.
خوب شما اسناد به چي ميكني اين دليل مياري علمي بگو صرف اينكه يه جا مجاني حجم ميده كه آدم نبايد يه pdf يه گيگ بذار تو بانك...!

شما دارید یه سایت کاملاً استاتیک رو در نظر می گیری فرض کن شما سایت رو آپلود کردی و pdf برای help گذاشتی حالا می خوای یه چیزایی بهش اضافه کنی و حجم هاست در اختیارت 1گیگ باشه حالا بعد از تغییر pdf وقتی خواستی بزاریش رو هاست می بینی حجمم سایتت از 1گیگ گذشته حالا می خوایی چیکار کنی؟!!
سايت استاتيك...! اتفاقا دوستمون ASPX يك راه حل بسيار دايناميك ارائه داد كه برنامه شما انعطاف لازم داشته براي مديريت فايل چجوري ميگي استاتيك دوست من
شما وقتي يه 1گيگ فضا داري ميايي حجم آپلود كاربر محدود ميكني و براي مديريت سايت يه حجم اختصاص ميدي بعدم كمبود فضا چه ربطي به بالا بردن كارايي داره؟

داداش جون مشکل سر \\ یا \ نیس. هیچ هاستی اجازه ایجاد فایل بعد از آپلود سایتو نمیده. اوکی؟!!!!!!!!!!!!
پس چجوري فايل آپلود ميكنن...!
دوستان عزيز خوبه هميشه آدم براي حرفاش دليل علمي بياره صرف اينكه يه جا ميزبان حال نكرده به شما حق دسترسي بده نگيد كه فايل آپلود نميشه يا ايني كه من ميگم درسته شما غلط ميگي يه راه حل علمي هميشه مورد قبوله...!

ASPX
چهارشنبه 02 شهریور 1390, 13:01 عصر
هیچ هاستی اجازه ایجاد فایل بعد از آپلود سایتو نمیده. اوکی؟!!!!!!!!!!!!
بیخیال دیگه ادامه این بحث رو نباید داد!

hamzeh241
چهارشنبه 02 شهریور 1390, 13:15 عصر
این یه راه حله هر کی خواست(که در آینده می خواد) استفاده کنه هرکیم نخواست استفاده نکنه. در ضمنSaman Hashemi (http://barnamenevis.org/member.php?160262-Saman-Hashemi) فکر نکنی تعداد پست بالا نشاندهنده علم بالاست. دود اگر بالا نشیند کسر شان شعله نیست جای چشم ابرو نگیرد گر چه او بالاتر است. دوست من نه شما اشتباه می گید نه من فقط حرف همو نمی فهمیم ادعا برنامه نویسم نداریم

hamzeh241
چهارشنبه 02 شهریور 1390, 13:39 عصر
در جواب همتون یه مثال علمیو عملی میارم.
یه فایل pdf تو سایت دارید که روزی چند خط تو یه چند بازه زمانی بهش اضافه می شه. حال می خوای چی کار کنی؟ یه جواب علمی بده قانع بشم؟ منتظرم
در جواب اینم"دوستان عزيز خوبه هميشه آدم براي حرفاش دليل علمي بياره صرف اينكه يه جا ميزبان حال نكرده به شما حق دسترسي بده نگيد كه فايل آپلود نميشه يا ايني كه من ميگم درسته شما غلط ميگي يه راه حل علمي هميشه مورد قبوله...!" به جز هاست خونه خودمون نباشه یه هاست پدر مادر دار ندیدم که پرمیشن رایت داده باشه یعنی با منطق هاست در تناقض اگر این حق رو بده

mehran_sh_t
چهارشنبه 02 شهریور 1390, 13:45 عصر
اومدم آموزش رو خوندم، بحث رو هم خوندم، اونجا که موافق بودم، "تشکر" کردم
کمتر از 5 دقیقه این آقاهه که آخر اسمش شماره داره (hamzeh241) اومده پیغام زیر رو واسه من گذاشته:



سلام
به این کارت می گن پاچه خواری مفلوک




اول فرهنگ استفاده از یک سایت و امکاناتش رو بفهم، بعد هم فرهنگ انتقاد پذیری داشته باش!

eof_programming
چهارشنبه 02 شهریور 1390, 13:49 عصر
پس چجوري فايل آپلود ميكنن...!
خوب توجه کن یاد بیگیری
اونایی که هاست مال خودشونه خب مسئله حل شدس چون هم امکان آپلود فایل و تغییرش رو داره و هم محدودیت نداره.
اونایی که محدودیت دارن مجبورن تو دیتابیسشون ذخیرش کنن و کاربرو محدود کنن.
یه چیز دیگه حالا فرض کن یه کاربر (بد پیله) میاد یه فایل 4 گیگی رو واسه آپلود تو سایت تو انتخاب میکنه و از خط دیال آپ هم استفاده میکنه. به نظرت الان سرور چه بلایی سرش میاد اگه حجم فایلو محدود نکرده باشی. منتظر میمونه تا آخرین بیت رو هم از کاربر بگیره.

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

hamzeh241
چهارشنبه 02 شهریور 1390, 13:52 عصر
اومدم آموزش رو خوندم، بحث رو هم خوندم، اونجا که موافق بودم، "تشکر" کردم
کمتر از 5 دقیقه این آقاهه که آخر اسمش شماره داره (hamzeh241) اومده پیغام زیر رو واسه من گذاشته:



اول فرهنگ استفاده از یک سایت و امکاناتش رو بفهم، بعد هم فرهنگ انتقاد پذیری داشته باش!
فرهنگو از تو یاد می گیرم که برای فحش دادان ملتم تشکر می کنی منم یه چندتا دادم گفتم بیایی تشکر کنی!!!!
باید اول پست می نوشتم ورود .... ممنوع. ادب رو از ASPX یاد بگیر

Saman Hashemi
چهارشنبه 02 شهریور 1390, 14:00 عصر
1- در ابتدا از كارتون كه علمتونو به اشتراك گذاشتيد تشكر كردم
2- هيچ جا ادعا نكردم كه چيزي بلدم و اينو حتي ميتونيد توي پروفايل ببينيد نياز به سرودن شعر نيست تمام كساني كه بنده ميشناسن ميدونن نيتم خيره و علم اندوزي و الا خداروشكر اونجاهايي كه بودم و هستم از نظر فكري اونقدر راضي نگه ميداره كه نخوام به چند دوست تازه كار فخرفروشي كنم...!
3- شما حرفاتون با شبهاتي همراه بود اين امكان داره بعدا عزيزاني كه بخوان ازين مطالب استفاده كنند دچار مشكل بكنه صرفا خواستم پست به نتيجه برسه و هيچ منظوري نداشتم...!
4- برادر من سعي كن هميشه خودتو در مسائل علمي مخصوصا اين شاخه گول نزني كه راه راه،رسيدن مهمه نه مسير...!
اميدوارم ازم نرنجيده باشي فقط سعي براين بود تبادل نظر كنيم كه هر دو سود ببريم...!

hamzeh241
چهارشنبه 02 شهریور 1390, 14:08 عصر
من قبلاً توپست بقیه دوستانم دیده بوده ولی باور نمی کردم که اینجا هم باند بازی باشه. به هر حال من نمی خواستم پست بزارم به خاطر یکی از بچه ها که کارش گیر بود گذاشتم.
دوست من غرور داره از سر تا پایه پستات می زنه بیرون " چند دوست تازه كار فخرفروشي كنم" من به جرات می گم هیچی... نیست. وقت با ارزش تر از این حرفاس که به جدل صرفش کنم برو خوش باش بیل گیتس

Saman Hashemi
چهارشنبه 02 شهریور 1390, 14:23 عصر
آپلود فايل (http://www.asp.net/data-access/tutorials/uploading-files-cs)