في القسم السابق ، أكملنا وظائف إضافة المنتجات وتحديثها. يتضمن هذان الجزءان تحميل صور المنتج ، وليس هناك تفسير مفصل. تحقيقًا لهذه الغاية ، تقدم هذه المقالة وظيفة Struts2 لتنفيذ تحميل الملف.
1. تغليف معلومات الملف
أولاً ، يجب أن يكون لدينا نموذج لتغليف معلومات الملف. يحتاج هذا النموذج إلى ثلاث سمات: الملف ونوع الملف واسم الملف. بالنسبة للصورة التي نريد أن نمر بها ، نقوم بإنشاء نموذج جديد على النحو التالي:
الفئة العامة fileImage {ملف الملف الخاص ؛ سلسلة خاصة contentType ؛ اسم الملف الخاص بالسلسلة ؛ الملف العام getFile () {file file ؛ } السلسلة العامة getContentType () {return contentType ؛ } السلسلة العامة getFilename () {return filename ؛ } public void setupload (ملف الملف) {// لا يمكن أن تكون طريقة SET هي نفسها اسم السمة ، ولكن يجب أن تكون المعلمات عند تمريرها من المقدمة هي نفس اسم طريقة SET. أي أن المعلمة التي تم تمريرها في المقدمة هي fileimage.upload this.file = file ؛ } public void setuploadContentType (string contentType) {this.contentType = contentType ؛ } public void setUploAdfilename (string fileName) {this.filename = filename ؛ }}بهذه الطريقة ، يتم كتابة النموذج. بالنظر إلى أن منطق تحميل الملفات ليس فريدًا في إجراء واحد ، فإننا نكتب منطق تحميل الملف إلى فئة الأدوات ، بحيث يمكن إجراء جميع مكالمات الإجراءات. لذلك نقوم بإنشاء فئة أداة تحميل ملفات جديدة (لبرمجة الواجهة ، نقوم أيضًا باستخراج واجهة فئة الأدوات):
2. فئة أداة تحميل الملفات الكاملة
// ملف تحميل ملف واجهة فئة أداة ملفات pileupload {// قم بتنفيذ وظيفة تحميل الملف ، وإرجاع اسم الملف الجديد بعد تحميل السلسلة التجريدية العامة exploadfile (fileImage fileImage) ؛ }. value ("#{prop.filepath}") //@value تعني العثور على الفول مع id = "prop" في ملف beans.xml. يقرأ ملف تكوين الخصائص من خلال التعليق التوضيحي ، ثم يقرأ قيمة المفتاح = filePath في ملف التكوين المقابل setFilePath (سلسلة filepath) {system.out.println (filepath) ؛ this.filepath = filepath ؛ } // 1. الحصول على ملحق السلسلة getFileStext (اسم ملف السلسلة) {return filenameUtils.getextension (اسم الملف) ؛ } // 2. قم بإنشاء رقم UUID عشوائي كاسم جديد للملف سلسلة خاصة NewFilename (اسم ملف السلسلة) {String ext = getFileStex (filename) ؛ إرجاع uuid.randomuuid (). toString () + ".". + تحويلة ؛ }. حاول {fileutil.copyfile (fileimage.getFile () ، ملف جديد (filepath ، pic)) ؛ // المعلمة الأولى هي الملف الذي تم تحميله ، والمعلمة الثانية هي نسخ الملف إلى الموافقة المسبقة عن علم المسار الجديد ؛ } catch (استثناء e) {رمي new runTimeException (e) ؛ } أخيرًا {fileimage.getFile (). delete () ؛ }}}هناك تعليق توضيحي أعلاه ، وهو الحصول على المسار الذي سيتم تخزين الملف إليه من ملف الخصائص. للحصول على التفاصيل ، يرجى الرجوع إلى: Spring للحصول على معلومات ملف التكوين.
3. حقن فئات الملفات المغلفة وفئات الأدوات في العمل
بعد كتابة فئة تغليف الملفات وفئة أداة تحميل الملفات ، نحتاج إلى ضخ هذين الكائنين في إجراءنا ، بحيث يمكن تنفيذ وظيفة تحميل الملف في الإجراء:
controller ("baseaCtion") scope ("prototype") فئة عامة baseaction <T> يمتد إجراءات Actionuports requestaware ، sessionaware ، applicationaware ، modeldriven <t> {// fileimage fileimage ؛ . publiciMage getFileImage () {return fileimage ؛ } public void setFileImage (fileImage fileImage) {this.fileImage = fileImage ؛ } // حذف رمز غير ذي صلة آخر ...} 4. تنفيذ تحميل الملف
حسنًا ، يمكننا الآن تنفيذ تحميل الملفات في OfficeAction. إذا تم كتابة فئة الأدوات ، فسيكون مقدار الكود في الإجراء صغيرًا جدًا ، وهو أيضًا الميزة التي تلفها التغليف.
controller ("ProductAction") scope ("prototype") تمتد وضع المنتج العام للطبقة العامة <torder> {// إغفال رمز غير ذي صلة آخر ... void public save () يلقي الاستثناء {// يتم استخراج فئة أداة fileUpload ، طريقة التحميل مباشرة ، تقبل كائن fileImage وإرجاعها الجديد pic = fileboado. model.setpic (pic) ؛ model.setDate (Date ()) ؛ System.out.println (نموذج) ؛ // يتم تخزين معلومات المنتج في productervice.save (نموذج) ؛ } public void update () {string pic = fileupload.uploadfile (fileImage) ؛ model.setpic (pic) ؛ model.setDate (Date ()) ؛ System.out.println (نموذج) ؛ // تحديث Product Productervice.update (نموذج) ؛ }}وبهذه الطريقة ، نكممل وظيفة تحميل الملفات من مكتب الاستقبال.
العنوان الأصلي: http://blog.csdn.net/eson_15/article/details/51366384
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.