PDA

View Full Version : انتقال عکس در نرم افزار های تحت شبکه ( Database On Server )



sirvan-me
پنج شنبه 18 آبان 1391, 08:55 صبح
سلام به همه ی دوستان ... سوالی داشتم .
من نرم افزاری در دو نسخه ی Client و Server دارم . در نرم افزار Server یک سری عکس رو باید تو دیتابیس ذخیره کنم . اول کار اومدم مسیر عکس رو تو دیتابیس ذخیره کردم اما زمانی که می خواستم اون ها رو از طریق Client ها بازیابی کنم این کار امکان پذیر نبود . به همین دلیل تصمیم گرفتم خود عکس ها رو تو دیتابیس ذخیره کنم .

حالا سوالم اینه که آیا حالا که من خود عکس ها رو ذخیره کردم ، سرعت انتقال داده و بازیابی برای Client ها پایین نمیاد ؟ اگر بخوام از حالت ذخیره ی آدرس عکس استفاده کنم ، چطور می تونم از سمت Client اونها را بازیابی کنم ؟ ممنون میشم نظر کارشناسی بدین ...

sirvan-me
پنج شنبه 18 آبان 1391, 17:40 عصر
دوستان 31 مشاهده اما دریغ از یک جواب ... !!! لطفا یکی بیاد جواب من رو بده ...

Y_Safaiee
پنج شنبه 18 آبان 1391, 17:52 عصر
با سلام خدمت شما

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

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


2.
الف : راحت ترین کار (در صورت ذخیره مسیر) اینه که کارهای معمولی با Database باشه , کارهای نقل و انتقال با سوکت,یعنی کاربر فایل رو فراخوانی میکنه,سیستم کلاینت کاربر به سرور Request میده سرور مسیر رو میگیره فایل رو میخونه و بایت های فایل رو برای کلاینت میفرسته کلاینت بایت ها رو میگیره و به فایل تبدیل میکنه.

ب : از خود FileStream sql server 2008 استفاده کنین.
و...

موفق باشین
بایت بایت

sirvan-me
پنج شنبه 18 آبان 1391, 18:58 عصر
مرسی یونس جان ...
مثل همیشه بسیار کامل و دقیق ...

سواله دیگه ای داشتم ...
من برای خوندن عکس از دیتابیس روی سرور و بارگذاری اون تو Picturebox موجود تو برنامه Client ، نیاز به استفاده از سوکت پروگرمینگ دارم ؟ من به صورت معمول یعنی واکشی از دیتابیس و خوندن از طریق Reader کار کردم ، آیا این اشتباهه ؟

Y_Safaiee
پنج شنبه 18 آبان 1391, 19:16 عصر
با سلام مجدد

خواهش میکنم خوشحالم که میتونم به شما دوستان یاری برسونم.

1.آره,نوشتن سوکت پروگرمینگم بسیار بسیار آسونه,سرور رو یه پورت گوش میده درخواست اومد درخواست رو پردازش و با توجه به دستور کار مورد نظرو انجام میده,مثلا من خودم از این روش برای ارسال اس ام تو برنامه های شبکه استفاده میکنم,مودم GSM به سیستم سرور وصله هرکدوم از کلاینت ها که میخوان اس ام اس بفرستن چنین دستوری به سرور میدن


string command="sms&" + تلفن طرف +"&"+متن پیام ;

با رسیدن این دستور سرور میفهمه باید اس ام اس بفرسته,تلفن طرف چنده,متن پیام چنده و بعد از ارسال پیام یه تائیدیه واسه کلاینت میفرسته.

یه نکته دیگه اینکه اگه تعداد درخواست ها زیاد شد یا پورت ارتباطی جدید بسازه یا فرمان ها رو داخل بافر قرار بده و یکی یکی برداره و اجرا کنه.

برات یه سمپل کد بعدا مینویسم

2.نه,هرکسی یه روشی داره و بسته به برنامش و میزان علمش و امکاناتش بهترین روش رو انتخاب میکنه,مثلا من به صورت Cache ای استفاده میکنم.

موفق باشی
بایت بایت

فرید نجفلو
پنج شنبه 18 آبان 1391, 20:04 عصر
سلام دوست عزیز
اگه فقط مشکلتون ذخیره و بازیابی تصویر از دیتابیس (محلی یا شبکه) SQL Server هست بهتره خودتون رو سوکتینگ یا برنامه کلاینت/سرور نکنید!
راحت از ریموت کانکشن سکیو ال رو فعال کنید و فقط با یه کانکشن استرینگ صحیح تمام برنامه هاتون رو مستقیما به دیتابیس متصل کنید

البته یادتون باشه وقتی دارید با دات نت کار می کنید برای برنامه های کلاینت/ سرور استفاده از ریموتینگ و در صورت توان WCF به صرفتر هست و درگیری با سوکت و ریکوئیست و ... رو ندارید

sirvan-me
جمعه 19 آبان 1391, 15:41 عصر
سلام دوست عزیز
اگه فقط مشکلتون ذخیره و بازیابی تصویر از دیتابیس (محلی یا شبکه) SQL Server هست بهتره خودتون رو سوکتینگ یا برنامه کلاینت/سرور نکنید!
راحت از ریموت کانکشن سکیو ال رو فعال کنید و فقط با یه کانکشن استرینگ صحیح تمام برنامه هاتون رو مستقیما به دیتابیس متصل کنید

البته یادتون باشه وقتی دارید با دات نت کار می کنید برای برنامه های کلاینت/ سرور استفاده از ریموتینگ و در صورت توان WCF به صرفتر هست و درگیری با سوکت و ریکوئیست و ... رو ندارید

منم منظورم اینه که من تو برنامم برای بازیابی عکس از DataReader استفاده می کنم و مشکلی هم ندارم ... آیا بهتره برای همچین نرم افزاری که گفتم که باید یه سری عکس از دیتابیس روی سرور واکشی کنه ( عکس های سوالات آزمون ) از Socket استفاده کنم ؟!!!!

sirvan-me
جمعه 19 آبان 1391, 18:14 عصر
هم اکنون نیازمند یاری تان هستیم .... :لبخند:

sirvan-me
شنبه 20 آبان 1391, 14:04 عصر
یکی نیست جواب من و بده !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1