بشكل عام ، هناك طريقتان لتحميل الصور. أحدهما هو كتابة ملف الصورة في قاعدة البيانات ، والآخر هو تخزينه في دليل ملف الخادم. يجب تحويل ملفات الصور المكتوبة إلى قاعدة البيانات إلى تنسيق دفق ثنائي ، وتحتل مساحة قاعدة البيانات ، وهي مناسبة لتخزين عدد صغير من الصور. على سبيل المثال ، تتمتع بعض الرموز الصغيرة في النظام بميزة الكتابة إلى قاعدة البيانات بأنها آمنة نسبيًا ولا يتم حذفها بسهولة من قبل المستخدمين عن طريق الخطأ.
إذا قمت بتخزين عدد كبير من الصور ، فعادة ما يتم حفظها في مجلد على الخادم. هناك العديد من الطرق لإكمال التحميل ، يمكنك استخدام طريقة البث وطريقة FTP ، ويتم استخدام طريقة FileUpload هنا.
مع أحجام النظام المختلفة ، تختلف أساليب معالجة ملفات الصور أيضًا. إذا لم يكن عدد الصور في النظام كبيرة ، فما عليك سوى تخزين جميع الصور في نفس الدليل. إذا تم تجميع الصور أكثر ، فيمكنك تصنيف الصور وتخزينها وفقًا لتصنيف المواد ، مما سيوفر بعض الوقت في البحث عن الملفات على القرص.
عند تحميل الصور على الملفات ، يمكنك تحميل الصور مباشرة إلى الدليل ، يمكنك أيضًا كتابة اسم ملف الصورة ومسار الملف إلى قاعدة البيانات ، أو يمكنك إنشاء مسارات ملفات في البرنامج ديناميكيًا. إذا كانت الشركة تتطلب تخزين الصور على خادم خاص ، فمن الأنسب كتابة مسار الملف إلى الملف الكامل. بشكل عام ، من الأسهل معالجة ما إذا كانت المادة (مادة) تتوافق مع صورة. إذا كانت تتوافق مع صور متعددة ، فيجب استخدامها بالتزامن مع إعادة التدوير. من ناحية ، من الضروري معالجة العرض الديناميكي للصورة ، ومن ناحية أخرى ، من الضروري التحقق مما إذا كان يتم تكرار تسمية ملف الصورة. بالإضافة إلى ذلك ، عند معالجة الصور (تحميل وحذف وتعديل) ، تحتاج إلى التعاون مع المعاملات.
فيما يلي مقدمة مفتاح لأبنى التنفيذ لاستخدام FileUpload لتحقيق تحميل الصورة.
1. استخدم علامات الملف في الواجهة الأمامية:
<input name = "filename" type = "file" class = "text1" size = "40" maxLength = "40">
2. اضبط تنسيق envype للملف: multipart/form-data
<form name = "itemform" target = "_ self" id = "itemform" method = "post" Action = "servlet/item/fileuploadservlet" enctype = "multipart/form-data">
تعليمات حول enctype = "multipart/form-data":
إذا تم استخدام هذا التنسيق في JSP ، فلا يمكن لـ Servlet المقابلة استخدام request.getParameter () للحصول على معلمات. يجب عليك استخدام طريقة parserequest لكائن servletFileUpload لتحليل البيانات أولاً في كائن الطلب ، ثم استخدام علامة Isformfield للعنصر المحصور والتعاون مع طريقة getFileName للحصول على البيانات.
3. تنفيذ fileUploadServlet:
حزمة com.bjpowernode.drp.basedata.web ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.apache.commons.fileupload.fileItem ؛ استيراد org.apache.commons.fileupload.disk.diskfileItemFactory ؛ استيراد org.apache.commons.fileupload.servlet.servletfileupload ؛ استيراد com.bjpowernode.drp.baseddata.manager.itemmanager ؛ استيراد com.bjpowernode.drp.baseddata.manager.itemmanagerimpl ؛ استيراد com.bjpowernode.drp.util.applicationException ؛ الفئة العامة fileUploAdServlet يمتد ملخص {private file eploadpath ؛ ملف خاص temppath ؛ Override public void init () يلقي servletexception {// عندما يبدأ النظام ، ابدأ التهيئة. أثناء التهيئة ، تحقق مما إذا كان المجلد الذي يتم فيه تحميل الصورة ويوجد المجلد حيث يتم تخزين الملفات المؤقتة. إذا لم يكن موجودًا ، قم بإنشاء // احصل على المسار الفعلي الحقيقي المقابل لدليل الجذر UploadPath = ملف جديد (getServletContext (). getRealPath ("تحميل")) ؛ system.out.println ("eploadpath ====" + eploadpath) ؛ // إذا لم يكن الدليل موجودًا إذا (! UploadPath.exists ()) {// قم بإنشاء الدليل eploadpath.mkdir () ؛ }. if (! temppath.exists ()) {temppath.mkdir () ؛ } // إذا لم يتم عرض طريقة الفئة الأصل ، فلن يكون هناك أي مثيل itemmanager ، والذي سيؤدي إلى مؤشر فارغ super.init () ؛ } doget public void (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {dopost (request ، response) ؛ } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {// الحصول على البيانات من item_upload.jsp ، لأن تنسيق الترميز الخاص بالصفحة المحمّلة لا يمكن أن يكون مستخدمًا multipt/form. req.getParameter () // string itemno = req.getParameter ("itemno") ؛ //system.out.println("itemno======== " + itemno) ؛ /************************************* الطلب في فئة المصنع هذه ، يمكنك تكوين حجم المخزن المؤقت للذاكرة والدليل حيث يتم تخزين الملفات المؤقتة. DiskfileItemFactory Factory = New DiskfileItemFactory () ؛ // الحد الأقصى للحجم الذي سيتم تخزينه في Memory Factory.SetSizeThreshold (4096) ؛ // موقع حفظ البيانات أكبر من GetSizethReshold () Factory.SetRepository (Temppath) ؛ . // عند تلقي بيانات الملف التي تم تحميلها ، سيتم حفظ المحتوى في ذاكرة التخزين المؤقت للذاكرة. إذا تجاوز محتوى الملف حجم المخزن المؤقت المحدد بواسطة DiskfileItemFactory ، فسيتم حفظ الملف على القرص وتخزينه كملف مؤقت في الدليل المحدد لـ DiskfileItemFactory. // بعد استلام بيانات الملف ، يكتب ServleTupload البيانات من الملف في الملف في دليل الملفات المحمّل servletfilePload Upload = new ServletFileUpload (Factory) ؛ // سيتم طرح الحد الأقصى للحجم قبل إلقاء FileUploAdexception على التحميل. setsizemax (1000000 * 20) ؛ / ***********: String itemNo = "" ؛ . // ugns ما إذا كان ملف أو معلومات نص // هو حقل إدخال نموذج عادي إذا (item.isformfield ()) {if ("itemno" .equals (item.getfieldname ())) {itemNo = item.getString () ؛ }} // هل هو حقل الإدخال if (! item.isformfield ()) {// الاسم والمسار الكامل لسلسلة الملف المحمّلة = item.getName () ؛ حجم طويل = item.getSize () ؛ // تحديد ما إذا كان يتم تحديد الملف إذا ((filename == null || filename.equals ("")) && size == 0) {extre }. // احفظ الملف على القرص الفعلي للخادم: المعلمة الأولى هي: المسار الكامل (باستثناء اسم الملف). المعلمة الثانية هي: اسم الملف //item.write(file) ؛ . . // اكتب اسم ملف الصورة إلى قاعدة البيانات itemmanager.uploadItemImage (itemNo ، fileno) ؛ }} response.sendRedirect (request.getContextPath () + "/servlet/item/searchItemServlet") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ رمي ApplicationException جديد ("فشل التحميل!") ؛ }}} يرث هذا الفئة جهاز AbstractItemServlet: الفئة الوالدية المجردة لجميع servlets المادية ، المسؤولة عن إنشاء مثيل لـ itemManager
] Override public void init () يلقي servletexception {itemManager = new itemManagerImpl ()}}ItemManagerImpl هي فئة فرعية تنفذ واجهة ItemManager. هناك مشكلة واحدة في نموذج التصميم هذا ، الذي يحتوي على تحسين الرواتب ، لكننا لن نقوم هنا بأي ملاحظات غير ذات صلة لشرح تحميل الصور.
تلخيص:
حول طريقة التهيئة () init ():
عند تهيئة Servlet ، يتم إنشاء الدليل ديناميكيًا. فيما يلي ملف تحميل وملف مؤقت للمشروع والدليل تحت WebApps من Tomcat.
تجدر الإشارة إلى أن طريقة super.init () يجب أن يتم استدعاؤها هنا (Super ليست إشارة إلى كائن الفئة الأصل ، ولكنها مسؤولة عن استدعاء طريقة الفئة الأصل) ، وإلا ، فقد يتسبب ذلك في مؤشر فارغ للفئة.
يتم تنفيذ التحميل تقريبًا في ثلاث خطوات: استخدم مكون FileUpload لتحليل النموذج ؛ تحليل البيانات التي تم تمريرها بواسطة النموذج ، وإرجاع نوع بيانات مجموعة القائمة: fileItem ؛ أخيرًا قم بتحميل الصورة.
استخدم طريقة iSformField () الخاصة بـ FileItem لتحديد ما إذا كان نصًا عاديًا أو ملفًا ؛
استخدم fileitem.write (ملف جديد (UploadPath ، اسم الملف)) لتحميل الملف. المعلمة الأولى هي: المسار الكامل (باستثناء اسم الملف). المعلمة الثانية هي: اسم الملف ؛
معالجة بيانات النص العادي:
if ("itemno" .equals (item.getFieldName ())) {itemNo = item.getString () ؛ }يعد التحميل تقنية ناضجة نسبيًا لسنوات عديدة ، وهناك العديد من التقنيات المعبأة التي يمكننا استخدامها مباشرة في مشاريعنا اليومية ، ولكن فهم بعض المبادئ الأساسية أمر ضروري.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.