نقل قول نوشته شده توسط niloo17 مشاهده تاپیک
شما می تونید یک fileupload داخل صفحه تون بذارید

<input type="file" name="Image" value="Choose..." class="input-large" />


در کنترلر موقع ثبت

if (Request.Files.Count > 0)
{
var image = Request.Files[0];
if (image != null)
{

var imageBuffer = new byte[image.ContentLength];
image.InputStream.Read(imageBuffer, 0, image.ContentLength);
}


تصویر را به صورت byte[] در دیتابیس ذخیره کنید.
ایشون گفته بودن بدون رفرش شدن صفحه ، یعنی از طریق ایجکس ، روش شما پست بک کامل رخ میده.

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

اگر نگران کارایی دیتابیس هستین تمامی پایگاه های داده ی جدید از FileTable استفاده میکنن که با حفظ کامل کارایی ، فایل های شما رو نگهداری میکنن و این روشی اصولیتر و بهتر است.

عملا در حجم دیتابیس تاثیر بسزایی داره .
جدا از اینکه شما تبدیل به بایت و مجددا به تبدیل به فرمت مورد نظر رو هنگام ذخیره سازی و واکشی رو هم در بایت کردن دارید.
با استفاده از توضیحاتی که در روش قبل گفتم افزایش حجم دیتابیس اصلا نکته منفی محسوب نمیشه و در عوض شما اطلاعاتی جامع و یکپارچه دارین. ضمن اینکه در نتیجه جستجو و سرعت عمل پایگاه داده نه فقط نتیجه نامطلوب نداره تازه باعث افزایش کارایی میشه.
تبدیل بایت ها به عکس و بالعکس هم کار هزینه بری نیست و هنگامیکه شما یک عکس رو از طریق IIS درخواست میدین بصورت بایت به مرورگر ارسال میشه. حالا چه به صورت یک فایل مجزا ذخیره شده باشه چه بصورت آرایه ای از بایت ها هیچ تفاوتی در نحوه برخورد با عکس وجود نداره تنها تفاوت در زمان دسترسی به این بایت هاست که در فایل چون مستقیما به فایل دسترسی داره کمی سرعت بیشتره ولی با توجه به سایر هزینه ها چندان امتیازی محسوب نمیشه.
سلام به همه دوستان
من می خام یه فایل عکس از کاربر بگیرم و توی دیتا بیس ذخیره کنم اما نمی خام صفحه رفرش بشه
راه حل چیه؟؟؟
من از روش زیر استفاده کردم و نتیجه بسیار مطلوبی هم گرفتم:
ابتدا پلاگین jquery.form رو از آدرس http://malsup.com/jquery/form/ دریافت کنید.
نحوه استفاده هم بسیار ساده ست:
من فرمی به شکل زیر دارم که کار انتخاب عکس رو انجام میده:
کد HTML:
 <form id="frm-pro-up" method="post" action="@Url.Action("uploadprofilepicture", "profile")" enctype="multipart/form-data">                                        <input id="pro-file" name="file" type="file" accept="image/*" />                                    </form>
حالا هروقت فرم Submit میشه شما باید با کمک پلاگین فوق و جی کوئری جلوی پست بک رو بگیرین و بصورت ایجکس اطلاعات رو به سرور ارسال کنید:
$('frm-pro-up').on('submit', function (event) {

var options = {
context: $(event.target),
beforeSend: function (xhr) {
//میتونید در اینجا یک لودر نمایش بدین
},


uploadProgress: function (event, position, total, percentComplete) {
var opc = percentComplete / 100;
//خاصیت بالا درصد آپلود عکس رو نشون میده
},


success: function (result) {
var data = $.parseJSON(result);


if (data.success) {
alert('عکس شما با موفقیت آپلود شد');
}
else if (data.fail) {
alert('خطایی در آپلود عکس رخ داده است.');
}
},


complete: function (xhr, status) {
//در اینجا لودر رو مخفی کنید
}
};


// pass options to ajaxForm
$(this).ajaxSubmit(options);
event.preventDefault();
});


اگر مشکلی بود بگین تا یک نمونه کامل براتون آپلود کنم.