نمایش نتایج 1 تا 4 از 4

نام تاپیک: درج فرم به صورت ajax ای و آپلود فایل

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    Iran
    پست
    1,338

    درج فرم به صورت ajax ای و آپلود فایل

    فرض کنید باید فرمی رو به همراه یک تصویر به صورت ajax ای درج کنیم
    برای آپلود تصویر میشه از پلاگین های جی کوئری مثل bluimp یا dropzonejs استفاده کرد


    شرایط ایده آل اینه که کاربر فرم رو پر کنه و تصویر رو هم انتخاب کنه
    و در آخر دکمه submit رو کلیک کنه.
    (در این حالت در هنگام انتخاب تصویر، تصویر در یک فولدر temp ذخیره میشه و با زدن دکمه داده ها به همراه نام تصویر در دیتابیس ذخیره میشن و خود تصویر هم به فولدر دائم move میشن، یعنی از فولدر Temp حذف میشن و به فولدر اصلی منتقل میشن)


    ولی مشکل اینه که ممکنه کاربر تصویر رو انتخاب کنه (که تصویر می ره در فولدر temp ذخیره میشه)
    ولی دیگه از ادامه کار منصرف بشه و دکمه ثبت رو کلیک نکنه.
    که در این صورت یک فولدر Temp با تعداد زیادی تصویر خواهیم داشت که بی دلیل حجم سرور رو اشغال می کنه.


    برای رفع این مشکل چه راهی رو پیشنهاد می کنید؟








    یک روش هم البته وجود داره که دو مرحله ای کردن کار هست، یعنی ابتدا کاربر فرم رو ثبت کنه و در مرحله بعد پلاگین آپلود تصویر بهش نشون داده بشه که از نظر من راه بدی نیست ولی ممکنه این برای یه سری مشتریا قابل قبول نباشه
    البته این روش وقتی که بخواهیم به فرض گالری تصاویر رو برای محصولمون آپلود کنیم روش خیلی خوبیه ولی وقتی فقط یک تصویر بخواد درج بشه شاید زیاد جالب نباشه


    همچنین


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

  2. #2

    نقل قول: درج فرم به صورت ajax ای و آپلود فایل

    ولی مشکل اینه که ممکنه کاربر تصویر رو انتخاب کنه (که تصویر می ره در فولدر temp ذخیره میشه)
    ولی دیگه از ادامه کار منصرف بشه و دکمه ثبت رو کلیک نکنه.
    که در این صورت یک فولدر Temp با تعداد زیادی تصویر خواهیم داشت که بی دلیل حجم سرور رو اشغال می کنه.
    یک راه حل این هست که نام تصاویری که آپلود میکنید رو + DateTime.Now بکنید .
    با استفاده از یک Scheduler مثال Quartz یک Job بنویسید ، فایل های این فولدر رو مثلا هر 1 ساعت چک بکنه و بر اساس DateTime اون ها ، مثلا اگر 10 دقیقه از آپلودش گذشته بود ( مقایسه با DateTime فعلی ) اون فایل رو پاک کنه .

    راه حل دوم این هست که آپلود عکس و ذخیره در دیتابیس با 1 دکمه انجام بشه و نیاز هم نیست همون موقع که کاربر عکس رو انتخاب میکنه بصورت Ajax ای آپلود بشه ; بصورت HttpPostedFileBase بفرستیدش به اکشن :
    https://stackoverflow.com/a/14674531/6661314

  3. #3
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    Iran
    پست
    1,338

    نقل قول: درج فرم به صورت ajax ای و آپلود فایل

    ممنون
    یه چیزی مشابه روش اول رو خودم هم بهش فکر کرده بودم ولی به نظرم روش خوبی نیست.

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


    فعلا کاری که انجام دادم
    در پلاگین bluimp ابتدا کاربر می تونه فایل ها رو add کنه بعد با کلیک دکمه Start upload فایل هایی که در صف آپلود قرار گرفتن آپلود می شن. (قبلش حواسم به این مسئله نبود)
    اومدم این کلیک رو در Success تابع درج فراخوانی کردم به شکل زیر:
    success: function (response) {                    alert("Hello: " + response.Name + " .\nCurrent Date and Time: " + response.DateTime);


    $("#uploadButton").click();
    },

    در مورد dropzone هم می شه یه همچین قضیه ای رو پیاده کرد.
    ولی خوب ایرادی که این قضیه داره هم البته به نظر من اینه که با اینکه کاربر فقط یک دکمه رو کلیک می کنه ولی یک بار درج در دیتابیس انجام میشه و یک بار هم ویرایش باید صورت بگیره برای درج نام فایل. یعنی دو تا کوئری، که البته به نظرم محاسن این پلاگین اون قدر هست که بشه از این گذشت.

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

  4. #4

    نقل قول: درج فرم به صورت ajax ای و آپلود فایل

    سلام.
    اون مورد اول که گفتین فایل ها در یک پوشه Temp آپلود بشه، تقریبا فکر کنم اکثرا از این روش استفاده میکنند.
    اما به قول شما ممکنه کاربر منصرف بشه.
    استفاده از
    Quartz میتونه مشکل رو حل کنه...اما به نظر من راه حل ساده ترش اینه یه قسمت توی برنامه تعریف بکنید که فایل های مربوط به Temp رو بر اساس تاریخ آپلود Sort بکنه و بتونید همه اون ها مشاهده کنید و دسته جمعی یا به صورت تکی پاک کنید اینجوری هم برنامه درگیر نمیشه هر چند دقیقه بیاد چک بکنه....البته همه چیز بستگی به تعداد کاربرتون داره که واقعا چقدر از برنامه استفاده میکنند و بسته به اون سناریو کار رو بچینید.
    مثلا خود من واسه یه کاری از Dropzonejs دقیقا به همین صورت استفاده کردم که داخل پوشه Temp آپلود میکردم بعدش وقتی فایل به صورت موفق آپلود میشد به سمت کلاینت اسم فایل رو برگشت میدادم و داخل یه
    hidden field قرار میدادم و وقتی کاربر فرم رو Submit میکرد فایل رو از پوشه Temp جا به جا میکردم و اسمش رو داخل دیتابیس نگه میداشتم.
    البته فکر کنم راه حل های بهتری هم برای این کار وجود داشته باشه.
    اما نگرانی شما بیشتر سر اون پوشه Temp هست که به نظرم اصلا جای نگرانی نداره..چون اسمش روشه..Temp...فایل های موقت..پس اگر حذف هم بشه مهم نیست.چون کاربر از آپلود اون ها منصرف شده و اصلا نمیدونه که فایلی داخل اون پوشه وجود داره

تاپیک های مشابه

  1. سوال: مشکل در دریافت مقادیر فرم به صورت Ajax
    نوشته شده توسط پیام حیاتی در بخش PHP
    پاسخ: 0
    آخرین پست: چهارشنبه 24 خرداد 1396, 20:55 عصر
  2. چک کردن برخی از اطلاعات فرم به صورت ajax ی
    نوشته شده توسط ali_mnkt در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: شنبه 07 دی 1392, 18:13 عصر
  3. پاسخ: 5
    آخرین پست: پنج شنبه 03 مرداد 1392, 21:38 عصر
  4. سوال: گذاشتن چند pictureBox روی فرم به صورت آرایه ای
    نوشته شده توسط ghrzarei در بخش C#‎‎
    پاسخ: 10
    آخرین پست: جمعه 26 تیر 1388, 09:42 صبح
  5. نمايش فرم به صورت دو مرحله اي
    نوشته شده توسط amir-haghighi در بخش C#‎‎
    پاسخ: 8
    آخرین پست: سه شنبه 08 مرداد 1387, 00:42 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •