بتاريخ: 20 يونيو 201015 سنة comment_195060 لو سمحتم عندي سؤالين ضروري:- 1- انا استعمل Jdeveloper 11G وعندي جدول فية Culomn من نوع BBLOB مخزن فية صور اريد اعرض هذه الصور في صغحة 2- عندي جدول ثاني فية عمود ايضا لكن مخزن فية ال Path الخاص بالصور اريد عرض هذه الصور في صفحة من خلال هذا العمود المحتوي على ال Path تقديم بلاغ
بتاريخ: 28 يونيو 201015 سنة comment_195642 اولا: بالنسبه لعرض الصوره عن طريق مسارها المخزن فى عمود فى الداتابيز نقطه مهمه للايضاح اى صور تريد عرضها عن طريق مسارها يجب تخزينها فى فولدر ال public_html الخاص ببرنامجك وليس خارجه وبالطبع يمكن وضع داخله فولدر اخر اسمه images مثلا به حميع الصور بحيث يكون مسار الصوره المخزن فى العمود فى الداتابيز يحتوى على الباس الخاص بها بعد فولدر ال public_html يعنى المسار المكتوب فى عمود الداتابيز هكذا /Images/j0431640.png وكما قلنا هذا المسار معروف للجى ديفيلوبر انه بعد فولدر ال public_html وكل ما عليك انك تنزل الاتربيوت الخاص بالكولمن اللى فيه المسار من الداتاكنترول باليت ك outputtext وبعدين تقف على ال outputtext ورايت كليك عليه وتضغط convert وتختار image ومن الproperty inspector وفى السورس الخاص بال image تكتب #{bindings.FullPath.inputValue} طبعا ال FullPath هو اسم الاتربيوت المتخزن فيه المسار واعمل رن حتلاقى ان الصور ظهرت زى ما انت عاوزها ملحوظه:موضوع ان جميع الصور يتم وضعها فى فولدر ال public_html تاتى اهميته فى حاله الديبلوى بحيث ان السيرفر يستخدم الصور الموضوعه فى ال Document root الخاصه بالبرنامج المعمول له ديبلوى بالنسبه لعرض الصور المخزنه كبلوب فى الداتابيزحتعمل سيرفلت وتسجلها فى ملف ال web.xml وتديها ال Id الخاص بالرو بتاعك كباراميتر اللى غالبا حيكون Primary key (عشان تعرف اى رو حتجيب الصوره الخاصه به وطبعا حتجيب الاى دى الخاص بالرو من البيج ديفينشن بتاع الصفحه) وبعدين برمجيا حتستدعى العمود البلوب بتاعك وبتقره المحتويات الخاصه بالكولمن ك input Stream واستعين بالكود التالى لعمل ذلك private void processerequest(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // هنا بتخلى السيرفلت تاخد الاى دى لخاص بالرو اللى حتجيب محتويات البلوب كولمن بتاعه String ImageId=req.getParameter("Id"); OutputStream out=res.getOutputStream(); // هنا بتنادى على الابليكيشن موديول ومنه على الفيو اوبجكت الخاص بالتابل اللى فيه البلوب كولمن String amDef="Service.BlobAM" ; String config = "BlobAMLocal"; ApplicationModule am=Configuration.createRootApplicationModule(amDef, config); ViewObject vo=am.findViewObject("BlobView"); if (ImageId!=null){ vo.setWhereClause("Id="+ImageId); vo.executeQuery(); } if (vo.getEstimatedRowCount()==1){ Row currenrrow=vo.first(); // ("Content")هو اسم الكولمن البلوب BlobDomain image=(BlobDomain)currenrrow.getAttribute("Content"); InputStream is = image.getInputStream(); byte[] buffer = new byte[10 * 1024]; int nread; while ((nread = is.read(buffer)) != -1) out.write(buffer, 0, nread); out.flush(); out.close(); } Configuration.releaseRootApplicationModule(am, false); } اكيد طبعا حتغير فى الكود تبعا لاسم الكولمن اللى فيه البلوب والكولمن اللى فيه الاى دى الخاص بالرو واسم الابليكيشن موديول والفيو اوبجكت بتاعك ولازم تكون عارف جافا كويس فى كل الحالات واستدعى الميثود دى فى ال doGet وال doPost بتوع السيرفلت وبعدين فى الصفحه حتنزل صوره من الكومبونت باليت وفى السورس بتاعها حتكتب مثلا /imageservlet?Id=#{bindings.Id.inputValue} imageservlet/ اسم السرفلت فى ملف ال web.xml وليس اسم الكلاس بتاعها Id=#{bindings.Id.inputValue} ده الباراميتر بتاعها (الاى دى الخاص بالرو) وبناخده من البيج ديفينيشن واعمل رن وجرب حتلاقى ان الصور المتخزنه كبلوب ظهرت عندك فى الصفحه تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.