الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Upload And Download Blob In Adf

Featured Replies

بتاريخ:

ناس بتسال فى الموضوع ده كتير اوى ورغم وجوده على النت الا انى لقيت عمل ديمو بيمثل العمليه دى حيفيد الكثيرين

سيناريو الديمو

عندك صفحة فى الابليكيشن بتاعك اسمها Documents فيها فورمه خاصه بالموظفين وجدول خاص بالattachmets اللى رفعها كل موظف Master_Detail حتختار سجل اى موظف وبعدين حتضغط على ارفاق ملف حتظهر لك pop up window تطلب منك رفع هذا الملف ( الديمو بيرفع اى ملف على ألا يزيد حجمه فى المره الواحده عن 100 MB )وبعد ما تختار الملف و تضغط على حفظ حتلاقى ان فى جدول الAttachments اللى هو Detail لجدول الموظفين ظهر اسم الملف اللى تم رفعه الى الداتابيز ونوعه واسم الموظف الذى قام برفعه والوقت الذى تم رفعه فيه وكمان اختيار انك تعمل Download له اذا اردت عمل Download له حتضغط على ال Download Icons حتظهر لك نافذه لتحميل الملف فى اى مكان تريده

تشغيل الديمو

قم باضافه جدول الattachments الى scott Schema وهذا الجدول هو detail لجدول الموظفين وحمل السكريبت الخاص بالجدول وال sequence وال Trigger من المرفقات ثم افتح البرنامج على الجى ديفيلوبر JDeveloper R2 وظبط اعدادات ال Connection اللى اسمه ScottConn (البرنامج بيستخدم scott Schema ) على الاعدادات اللى عندك وتاكد ان نتيجة الاتصال هى success ثم قم بعمل Run لصفحة upload Documents حتلاقى ان فى فورم خاص بالموظفين وتحتها جدول ال attachments فارغ لانك لم تقم بتحميل اى ملف لاى موظف بعد كما فى الصوره

217928810.jpg


اختار سجل اى موظف ثم قم بالضغط على زر ارفاق ملف حتتفتح لك pop up window تطلب منك اختيار ملف لرفعه كما فى الصورة

518989544.jpg


قم باختيار اى ملف عندك ثم اضغط على حفظ ستجد ان الملف تم رفعه وجميع بيانات الملف من ناحية اسمه ونوعه واسم الموظف الذى قام برفعه ظهرت عندك فى الجدول مع امكانية تحميله كما فى الصوره

133857059.jpg


اذا اردت تحميله اضغط على ايقونه التحميل حتظهر لك نافذة التحميل كما فى الصوره

318014675.jpg




حمل البرنامج من المرفقات واى سؤال على اى جزئيه فى تنفيذه حرحب بيه

UploadDownloadADF.rar

Attachments.txt

بتاريخ:

جزاك الله خيرا على طرحك للأفكار ونشر العلم ... بس ياريت تحاولى تستخدمى
http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html
للتحويل من والى BlobDomain بدل من الكود الموجود فى كل من الدوال ...createBlobDomain..و downloadFileAction
يعنى على سبيل المثال بدل من الكود الموجود داخل الدالة .. createBlobDomain ممكن يحول الى

 private BlobDomain createBlobDomain(UploadedFile file)
 {
   if(file != null)
   {
  try
  {
    return new BlobDomain(IOUtils.toByteArray(file.getInputStream()));
  }
  catch (Exception e){e.printStackTrace();}
   }
   return null;
 }



اخيرا نتمنى منك ومن المهندس مصطفى ماجد افكار جديدة كل يوم :D

بتاريخ:
  • كاتب الموضوع

الاخ / miro_aer

شكرا على مرورك وعلى ملاحظاتك ولو لك اى ملاحظه تانى على المثال قولها اواى سؤال فى اى حاجه فى تنفيذه :)

بالنسبه لميثود IOUtils.toByteArray فانا عارفه ان الميثود دى بتقره ال Input stream وتحوله الى ByteArrayOutputStream لكن عيب الميثود دى انها بتعمل ال Buffer internally و بتحصل مشكله كبيره مع الملفات الضخمه لانك بتقراه كله مره واحده وبالتالى بفضل الطريقه الاولى اللى بتخلينى اتحكم فى حجم ال Buffer واقره من ال input واضع فى ال output لحد ما يخلص بدل ما احمل الملف بالكامل فى الذاكره

بتاريخ:

اسمحيلى اناقشك فى بعض النقاط :D
عيب الميثود دى انها بتعمل ال Buffer internally و بتحصل مشكله كبيره مع الملفات الضخمه لانك بتقراه كله مره واحده وبالتالى بفضل الطريقه الاولى اللى بتخلينى اتحكم فى حجم ال Buffer

طالما انك بتحددى حجم معين لل buffer معنى كده انك بتحملى ملف لايزيد عن هذا ال buffer ........ وده ممكن عمله بأنك تسألى على حجم الملف المراد تحميله انه لايتعدى حجم معين
وكمان ده السورس كود بتاع IOUtils ممكن تحددى فيه DEFAULT_BUFFER_SIZE

http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html

واقره من ال input واضع فى ال output لحد ما يخلص بدل ما احمل الملف بالكامل فى الذاكره
وده اللى بيعمله بالفعل فى الكود لانه مفيش طريقة برمجيا على ما اعتقد يحمل بيها الملف مره واحدة

الجميل فى الكلاس انه فيه دوال كتير ممكن نستفيد منها مش لازم فى المثال ده بس ... فى التعامل مع IO Stream

انا حبيت اشاركك بعض المعلومات ونجعل القارئ يستفيد اكتر :D

بتاريخ:
  • كاتب الموضوع

اسمحيلى اناقشك فى بعض النقاط

مفيش اى مشكله :)

طالما انك بتحددى حجم معين لل buffer معنى كده انك بتحملى ملف لايزيد عن هذا ال buffer


عندما احدد حجم معين لل Buffer اللى حقره واكتب بيه فى المره الواحده فانا بحدد بناء على عوامل كتير غير حجم الملف زى ال performance وال network والسرعه وو….وبالنسبه لحجم الملف انا لا اسال عنه ولكن باضع حجم معين لا يزيد عنه فى ملف ال web.xml وممكن يكون الحجم ده كبير

أيضا بالنسبه لحجم ال buffer فانا بحتاج احدد حجم معقول لل Buffer ده عشان اقره واكتب one Buffer بس فى المره فاهمنى لان الميثود دى بتستنى لما يكون عندى الداتا كلها وبعدين تروح كاتباها

عموما طريقه

Open input stream-open outputstream-create byte buffer واقره واكتب لم تحدث معى اى مشاكل على الاطلاق مع حجم الملفات عكس الطريقه التانيه كما ذكرت سابقا فلماذا لا تجرب استخدام طريقتك مع ملف حجمه مثلا 150MB وشوف شكل ال performance حيبقى عامل ازاى ؟
بتاريخ:

توجد بعض النقاط التي تحتاج تصحيح:

هالة:
بالنسبه لميثود IOUtils.toByteArray فانا عارفه ان الميثود دى بتقره ال Input stream وتحوله الى ByteArrayOutputStream لكن عيب الميثود دى انها بتعمل ال Buffer internally و بتحصل مشكله كبيره مع الملفات الضخمه لانك بتقراه كله مره واحده وبالتالى بفضل الطريقه الاولى اللى بتخلينى اتحكم فى حجم ال Buffer واقره من ال input واضع فى ال output لحد ما يخلص بدل ما احمل الملف بالكامل فى الذاكره
هذا غير صحيح لأنه في الكود يتم تحديد الـ buffer المطلوب قراءته وبالتالي لا يتم قراءة الملف مرة واحدة كما لا ننسى ان هذا الملف إنتاج أباتشي ولن يقعوا في مثل هذا الخطأ

عمرو:
طالما انك بتحددى حجم معين لل buffer معنى كده انك بتحملى ملف لايزيد عن هذا ال buffer ........ وده ممكن عمله بأنك تسألى على حجم الملف المراد تحميله انه لايتعدى حجم معين
هذا غير صحيح لأن تحديد الـ buffer معناه تحديد الحجم الذي يتم القراءة فيه في المرة الواحدة كما أن تحديد الحجم الأقصى يتم من خلال web.xml وليس برمجياً.

وده اللى بيعمله بالفعل فى الكود لانه مفيش طريقة برمجيا على ما اعتقد يحمل بيها الملف مره واحدة
يتم ذلك عن طريق تحديد قيمة كبيرة للـ buffer

هالة:
عندما احدد حجم معين لل Buffer اللى حقره واكتب بيه فى المره الواحده فانا بحدد بناء على عوامل كتير غير حجم الملف زى ال performance وال network والسرعه وو….وبالنسبه لحجم الملف انا لا اسال عنه ولكن باضع حجم معين لا يزيد عنه فى ملف ال web.xml وممكن يكون الحجم ده كبير
توجد دراسات تمت بالفعل على هذا الأمر متضمنة السرعات والشبكة وكافة العوامل الأخرى والنتائج هي ان حجم الـ buffer المثال على الإنترنت يكون من مضاعفات الرقم 2 بحد أقصي 8 كيلو ، أي من الممكن أن يكون 1 أو 2 أو 4 أو 8 ، وحالياً تعتبر 8 كيلو هي الأنسب في حين انها كانت في حدود 1كيلو عندما كان هناك dialup


Open input stream-open outputstream-create byte buffer واقره واكتب لم تحدث معى اى مشاكل على الاطلاق مع حجم الملفات عكس الطريقه التانيه كما ذكرت سابقا فلماذا لا تجرب استخدام طريقتك مع ملف حجمه مثلا 150MB وشوف شكل ال performance حيبقى عامل ازاى ؟
في الدالتين لا توجد مشاكل والنتيجة واحدة وكلاهما صحيح ولكنني أفضل طريقة عمرو لسبب واحد ، أن الكود عبارة عن سطر واحد وبالتالي أسهل على المبرمج في كتابتها وأوفر في الوقت

بتاريخ:

جزاك الله خيرا ياباشمهندس :D

  • بعد 1 سنة...
بتاريخ:

A very good tutorial.thanks

تم تعديل بواسطة Corbina

  • بعد 3 سنة...
بتاريخ:

سلام عليكم قمت بتحميل هذي المثال

 

وانا اعمل علي jdev11 وعندما اعمل رن للصفحة jsp مش راضية تفتح وبكون loding......... شغال قمتة بعمل صفحة jsf وفتح معي لكن عندما اختار الملف واضغط حفظ مش راضي يحفظ معي

لا اعرف ما هو السبب

بتاريخ:

سلام عليكم ..بالنسبه upload اكثر من ملف يعني مثلا لو عندي موظف عندو اكثر من مستند واحد لرفعه مره واحد ماهو السيناريو المتبع .انا بقوم حليت المشكله موقتا برفع الملفات ك rar

ارجو الافاده

بتاريخ:

تم إضافة هذه الإمكانية في الإصدار الجديد

  • بعد 1 سنة...
بتاريخ:

اذا في احد يقدر يفيدني اني افتح السكانر usb scanner  من java لاني بعمل بروجكت ADF

scan documents and save it on H.D Using ADF

بتاريخ:

يجب الاستعانة بمكتبة خارجية

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.