بتاريخ: 14 نوفمبر 201114 سنة comment_217565 ناس بتسال فى الموضوع ده كتير اوى ورغم وجوده على النت الا انى لقيت عمل ديمو بيمثل العمليه دى حيفيد الكثيرين سيناريو الديمو عندك صفحة فى الابليكيشن بتاعك اسمها 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 فارغ لانك لم تقم بتحميل اى ملف لاى موظف بعد كما فى الصوره اختار سجل اى موظف ثم قم بالضغط على زر ارفاق ملف حتتفتح لك pop up window تطلب منك اختيار ملف لرفعه كما فى الصورة قم باختيار اى ملف عندك ثم اضغط على حفظ ستجد ان الملف تم رفعه وجميع بيانات الملف من ناحية اسمه ونوعه واسم الموظف الذى قام برفعه ظهرت عندك فى الجدول مع امكانية تحميله كما فى الصوره اذا اردت تحميله اضغط على ايقونه التحميل حتظهر لك نافذة التحميل كما فى الصوره حمل البرنامج من المرفقات واى سؤال على اى جزئيه فى تنفيذه حرحب بيه UploadDownloadADF.rar Attachments.txt تقديم بلاغ
بتاريخ: 14 نوفمبر 201114 سنة comment_217574 جزاك الله خيرا على طرحك للأفكار ونشر العلم ... بس ياريت تحاولى تستخدمى 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; } اخيرا نتمنى منك ومن المهندس مصطفى ماجد افكار جديدة كل يوم تقديم بلاغ
بتاريخ: 14 نوفمبر 201114 سنة كاتب الموضوع comment_217576 الاخ / miro_aer شكرا على مرورك وعلى ملاحظاتك ولو لك اى ملاحظه تانى على المثال قولها اواى سؤال فى اى حاجه فى تنفيذه بالنسبه لميثود IOUtils.toByteArray فانا عارفه ان الميثود دى بتقره ال Input stream وتحوله الى ByteArrayOutputStream لكن عيب الميثود دى انها بتعمل ال Buffer internally و بتحصل مشكله كبيره مع الملفات الضخمه لانك بتقراه كله مره واحده وبالتالى بفضل الطريقه الاولى اللى بتخلينى اتحكم فى حجم ال Buffer واقره من ال input واضع فى ال output لحد ما يخلص بدل ما احمل الملف بالكامل فى الذاكره تقديم بلاغ
بتاريخ: 15 نوفمبر 201114 سنة comment_217591 اسمحيلى اناقشك فى بعض النقاط عيب الميثود دى انها بتعمل ال 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 انا حبيت اشاركك بعض المعلومات ونجعل القارئ يستفيد اكتر تقديم بلاغ
بتاريخ: 15 نوفمبر 201114 سنة كاتب الموضوع comment_217624 اسمحيلى اناقشك فى بعض النقاط مفيش اى مشكله طالما انك بتحددى حجم معين لل buffer معنى كده انك بتحملى ملف لايزيد عن هذا ال buffer عندما احدد حجم معين لل Buffer اللى حقره واكتب بيه فى المره الواحده فانا بحدد بناء على عوامل كتير غير حجم الملف زى ال performance وال network والسرعه وو….وبالنسبه لحجم الملف انا لا اسال عنه ولكن باضع حجم معين لا يزيد عنه فى ملف ال web.xml وممكن يكون الحجم ده كبير أيضا بالنسبه لحجم ال buffer فانا بحتاج احدد حجم معقول لل Buffer ده عشان اقره واكتب one Buffer بس فى المره فاهمنى لان الميثود دى بتستنى لما يكون عندى الداتا كلها وبعدين تروح كاتباها عموما طريقه Open input stream-open outputstream-create byte buffer واقره واكتب لم تحدث معى اى مشاكل على الاطلاق مع حجم الملفات عكس الطريقه التانيه كما ذكرت سابقا فلماذا لا تجرب استخدام طريقتك مع ملف حجمه مثلا 150MB وشوف شكل ال performance حيبقى عامل ازاى ؟ تقديم بلاغ
بتاريخ: 15 نوفمبر 201114 سنة comment_217626 توجد بعض النقاط التي تحتاج تصحيح: هالة:بالنسبه لميثود 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 حيبقى عامل ازاى ؟في الدالتين لا توجد مشاكل والنتيجة واحدة وكلاهما صحيح ولكنني أفضل طريقة عمرو لسبب واحد ، أن الكود عبارة عن سطر واحد وبالتالي أسهل على المبرمج في كتابتها وأوفر في الوقت تقديم بلاغ
بتاريخ: 20 سبتمبر 201312 سنة comment_240330 A very good tutorial.thanks تم تعديل 20 سبتمبر 201312 سنة بواسطة Corbina تقديم بلاغ
بتاريخ: 22 أغسطس 20178 سنة comment_289363 سلام عليكم قمت بتحميل هذي المثال وانا اعمل علي jdev11 وعندما اعمل رن للصفحة jsp مش راضية تفتح وبكون loding......... شغال قمتة بعمل صفحة jsf وفتح معي لكن عندما اختار الملف واضغط حفظ مش راضي يحفظ معي لا اعرف ما هو السبب تقديم بلاغ
بتاريخ: 24 أغسطس 20178 سنة comment_289432 سلام عليكم ..بالنسبه upload اكثر من ملف يعني مثلا لو عندي موظف عندو اكثر من مستند واحد لرفعه مره واحد ماهو السيناريو المتبع .انا بقوم حليت المشكله موقتا برفع الملفات ك rar ارجو الافاده تقديم بلاغ
بتاريخ: 3 أكتوبر 20187 سنة comment_296772 اذا في احد يقدر يفيدني اني افتح السكانر usb scanner من java لاني بعمل بروجكت ADF scan documents and save it on H.D Using ADF تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.