تحميل وتنزيل وإدارة تقنية الملفات الوظيفية: 1. استخدم XML كمعلومات تخزين قاعدة البيانات (DOM4J ، XPATH)
2. تحميل وتنزيل نماذج Java
3. قم بتقسيم دليل الملفات (دليل التجزئة هو طريقة لتحسين أداء تخزين الملفات)
بحاجة إلى حزمة جرة:
commons-filepload -1.2.2.jar ، commons-io-2.1.jar ، dom4j-1.6.1.jar and Jaxen-1.1-Beta-6.Jar
-----------------------------------------------------------------------------------
اكتب index.jsp أولاً
أقل HREF = "JSPS/TOPLOAD.JSP"> قم بتحميل الألبوم </a> <a href = "servlets/doptervlet"> Browse Album </a> </body> </html>
expload.jsp هي صفحة التنزيل الموضوعة في دليل JSPS
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01 <h1> Action = "<٪ = request.getContextPath () ٪>/servlets/uploadservlet" method = "post" enctype = "multipart/form-data"> file: <input type = "file" name = "file1"/> <br/> الوصف: <input type = "text" name = "desc"/> <br/> </body> </html>
ضع photos.xml في دليل SRC
<؟
كتابة كائن القيمة الضوئي
Package Cn.Hncu.Demain ؛ Public Class Photomodel {Private String ID ؛ سلسلة خاصة. سلسلة خاصة سلسلة خاصة سلسلة خاصة dateTime ؛ سلسلة IP الخاصة ؛ سلسلة خاصة DESC ؛ السلسلة العامة getId () {معرف الإرجاع ؛ } public void setId (string id) {this.id = id ؛ } السلسلة العامة getRealName () {return realName ؛ } public void setRealName (string realName) {this.realName = RealName ؛ } السلسلة العامة getext () {return ext ؛ } public void setext (String ext) {this.ext = ext ؛ } السلسلة العامة getDir () {return dir ؛ } public void setDir (string dir) {this.dir = dir ؛ } السلسلة العامة getDateTime () {return dateTime ؛ } public void setDateTime (String dateTime) {this.dateTime = dateTime ؛ } السلسلة العامة getip () {return ip ؛ } public void setip (string ip) {this.ip = ip ؛ } السلسلة العامة getDesc () {return desc ؛ } public void setDesc (string desc) {this.desc = desc ؛ } Override public string toString () {return "photomodel [id =" + id + "، RealName =" + RealName + "، ext =" + ext + "، dir =" + dir + "، dateTime =" + dateTime + "، ip =" + ip + "، desc =" + desc + "] ؛ }} هناك نوعان من أدوات الكتابة:
MyUtil (تنسيق التاريخ ، رمز كسر الدليل ، رمز معرف عشوائي)
package cn.hncu.utils ؛ import java.text.simpleDateFormat ؛ import java.util.date ؛ استيراد java.util.uuid ؛ الطبقة العامة myutils {private myutils () {} static simpledateformat format = new SimpledateThormat ( السلسلة الثابتة العامة getCurrentDateTime () {return format.format (New Date ()) ؛ } سلسلة ثابتة getUuid () {uuid uuid = uuid.randomuuid () ؛ string id = uuid.toString (). replaceall ("-" ، "") ؛ معرف الإرجاع ؛ } السلسلة الثابتة العامة getDir (سلسلة uuid) {string dir1 = integer.toHexString (uuid.hashCode () & 0xf) ؛ string dir2 = integer.toHexString ((uuid.hashCode () & 0xf0) >> 4) ؛ إرجاع dir1+"/"+dir2 ؛ }}DOM4JFACTORY (العمليات ذات الصلة DOM4J ، الحصول على كائن المستند ، حفظ العملية)
package cn.hncu.utils ؛ import java.io.file ؛ import java.io.fileInputStream ؛ import java.io.filenotfoundexception ؛ import java.io.fileOutputStream ؛ import java.io.unsupportedencopeException ؛ org.dom4j.io.outputformat ؛ import org.dom4j.io.saxreader ؛ import org.dom4j.io.xmlWriter ؛ public class dom4jfactory {private static dOM = null ؛ مسار السلسلة الثابتة الخاصة ؛ ثابت {try {saxreader sax = new saxreader () ؛ // تعلم كيفية تحميل مسار الموارد تحت الخادم (لأن مواردنا قد تم نشرها من Myeclipse إلى خادم Tomcat ، لذلك يختلف عن مشروع Java النقي الأصلي) // استخدم الفئة الحالية للعثور على محمل الفئة الخاص به ، ثم استخدم محمل الفئة للحصول على مسار الموارد = dom4jfactory.class.getClassloader (). DOM = SAX.READ (FileInputStream جديد) ؛ } catch (استثناء e) {رمي new runTimeException (e.getMessage () ، e) ؛ }} المستند الثابت العام getDom () {return dom ؛ ) Format.SetEncoding ("UTF-8") ؛ XmlWriter W = New XMLWriter (FileOutputStream جديد (ملف جديد (مسار)) ، تنسيق) ؛ W.Write (DOM) ؛ W.Close () ؛ العودة صحيح. } catch (استثناء e) {return false ؛ }}}اكتب PhotoDao من الطبقة السفلية
package cn.hncu.dao ؛ استيراد java.util.arraylist ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ استيراد org.dom4j.document ؛ import org.dom4j.Element ؛ eSport cn.hncu.demain.photomodel ؛ import cn.HuTIl.Dom.dom4jfactory ؛ Boolean Add (photomodel photo) {docum dom = dom4jfactory.getdom () ؛ العنصر جذر = dom.getRootElement () ؛ element ephoto = root.addelement ("photo") ؛ ephoto.addattribute ("id" ، photo.getId ()) ؛ ephoto.addattribute ("realName" ، photo.getRealName ()) ؛ ephoto.addattribute ("dir" ، photo.getdir ()) ؛ ephoto.addattribute ("ip" ، photo.getip ()) ؛ ephoto.addattribute ("dateTime" ، photo.getDateTime ()) ؛ ephoto.addattribute ("ext" ، photo.getext ()) ؛ ephoto.addelement ("desc"). setText (photo.getDesc ()) ؛ Boolean Boo = dom4jfactory.save () ؛ إرجاع بوو }. قائمة <PhotomOdel> list = new ArrayList <Photomodel> () ؛ العنصر جذر = dom.getRootElement () ؛ iterator <element> it = root.elementIrator () ؛ بينما (it.hasnext ()) {photomodel photo = new photomodel () ؛ العنصر e = it.next () ؛ photo.setId (e.attributeValue ("id")) ؛ photo.setDateTime (e.attributeValue ("dateTime")) ؛ photo.setdir (e.attributeValue ("dir")) ؛ photo.setext (e.attributeValue ("ext")) ؛ photo.setip (e.attributeValue ("ip")) ؛ photo.setRealName (e.attributeValue ("realName")) ؛ photo.setdesc (e.ElementText ("desc")) ؛ list.add (photo) ؛ } قائمة الإرجاع ؛ } photomodel public getinglebyid (string id) {dOMP = DOM4JFACTORY.GETDOD () ؛ قائمة <Photomodel> list = getall () ؛ لـ (photomodel photo: list) {if (photo.getId (). equals (id)) {return photo ؛ }} الإرجاع null ؛ } public boolean del (string id) {docum dom = dom4jfactory.getdom () ؛ العنصر e = (element) dom.selectsinglenode ("// photo [id = '"+id.trim ()+"']") ؛ إرجاع E.GetParent (). إزالة (E) ؛ }} اكتب أربعة servlets في النهاية
تحميل رمز servlet تحميل upload
package cn.hncu.servlets ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.io.inputStream ؛ استيراد java.io.printwriter ؛ import java.util.list ؛ import javax.servlet.servletexception ؛ import javax.servlet.http.htttttp.htttplet ؛ javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletrespons org.apache.commons.fileupload.disk.diskfileItemFactory ؛ import org.apache.commons.fileupload.servlet.servletfileUpload ؛ import org.apache.commons.io.fileutils ؛ import cn.hncu.da. Cn.Hncu.Utils.MyUtils ؛ uploadservlet من الطبقة العامة يمتد httpservlet {public void dogge (httpservletrequest request ، httpservletresponse) يلقي servleTexception ، ioException {response.setContentType ("text/html ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<body>") ؛ Out.println ("Get Upload غير مدعوم!") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {reponse.setContentType ("text/html ؛ charset = utf-8") ؛ printWriter out = response.getWriter () ؛ string path = request.getServletContext (). getRealPath ("/photos") ؛ DiskfileItemFactory Factory = New DiskfileItemFactory () ؛ Factory.SetRepository (ملف جديد ("g:/a")) ؛ servletfileupload تحميل = جديد servletfileupload (المصنع) ؛ expload.setsizemax (1024*1024*10) ؛ // الحد الأقصى للعملية التحميل 10M.SetHeaderenCoding ("UTF-8") ؛ // استخدم لتعيين ترميز اسم الملف ، أي ما يعادل: request.setcharacterencoding ("UTF-8") ؛ fileItem fi = null ؛ حاول {list <IptiTem> list = upload.parserequest (request) ؛ Photomodel Photo = جديد photomodel () ؛ // تغليف البيانات --- 7 سمات مطلوبة Boolean Boo = false ؛ inputStream في = null ؛ لـ (fileItem fi2: list) {fi = fi2 ؛ if (fi.isformfield ()) {string desc = fi.getString ("utf-8") ؛ photo.setdesc (desc) ؛ // desc} آخر {in = fi.getInputStream () ؛ سلسلة realName = fi.getName () ؛ if (realName == null || realName.trim (). equals ("")) {Out.print ("no file select!") ؛ يعود؛ } if (RealName.indexof ("//")! =-1) {RealName = RealName.SubString (RealName.lastIndexof ("//")+1) ؛ } photo.setRealName (realName) ؛ // real file name string ext = RealName.SubString (RealName.lastindexof (".")) ؛ photo.setext (ext) ؛ // 3 photo.setDateTime (myutils.getCurrentDateTime ()) ؛ // photo.setid (myutils.getuuid ()) ؛ // photo.setdir (myutils.getdir (photo.getid ())) ؛ قاعدة البيانات photodao dao = جديد photodao () ؛ boo = dao.add (photo) ؛ // إذا تم حفظ معلومات الصورة أعلاه بنجاح ، فستبدأ في تلقي ملف الصورة وحفظه على القرص الثابت للخادم إذا (boo) {system.out.println (dao) ؛ path = path+"/"+photo.getDir () ؛ ملف dir = ملف جديد (path) ؛ if (! dir.exists ()) {dir.mkdir () ؛ } string filename = path+"/"+photo.getId ()+photo.getext () ؛ fileUtils.copyInputStreamTofile (في ، ملف جديد (اسم الملف)) ؛ String strPrath = request.getContextPath ()+"/servlets/showservlet" ؛ out.print ("تم تحميله بنجاح! <a href = '"+strprath+"'> Browse Album </a>") ؛ } آخر {out.print ("التحميل فشل!") ؛ }} catch (fileuploadexception e) {رمي new runTimeException ("فشل التحميل!") ؛ "، e) ؛} أخيرًا {if (fi! = null) {fi.delete () ؛}} out.flush () ؛ out.close () ؛}}spherevlet الجانب servlet من ألبومات التصفح
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.util.list ؛ استيراد javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ javax.servlet.http.httpservletresponse ؛ استيراد cn.hncu.dao.photodao ؛ استيراد cn.hncu.demain.photomodel ؛ فئة عامة simpleservlet يمتد httpservlet ioException {dopost (طلب ، استجابة) ؛ } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {reponse.setContentType ("text/html ؛ charset = utf-8") ؛ request.setcharacterencoding ("UTF-8") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<body>") ؛ TRING TABLE = "<Table Border = '1' Width = '100 ٪'>"+ "<tr> <th> اسم الملف </th> <th> تحميل ip </h> <th> وقت التحميل </th> <th> صورة </th> <th> </th> <th> العملية </th> </tr>" ؛ out.print (الجدول) ؛ photodao dao = new photodao () ؛ قائمة <Photomodel> list = dao.getall () ؛ لـ (photomodel p: list) {out.print ("<tr>") ؛ out.println ("<td>"+p.getRealName ()+"</td>") ؛ out.println ("<td>"+p.getip ()+"</td>") ؛ out.println ("<td>"+p.getDateTime ()+"</td>") ؛ // إخراج picture string path = request.getContextPath ()+"/photos/"+p.getdir ()+"/"+p.getID ()+p.getext () ؛ out.println ("<td> <a href = '"+path+"'> <img src = '"+path+"' width = '200' height = '200'> </img> </a> </td>") ؛ String op = "<a href = '"+request.getContextPath ()+"/servlets/delservlet؟ id ="+p.getId ()+"'> delete </a>" ؛ out.println ("<td>"+p.getDesc ()+"</td>") ؛ op+= "<a href = '"+request.getContextPath ()+"/servlets/downservlet؟ id ="+p.getID ()+"'> تنزيل </a>" ؛ out.println ("<td>"+op+"</td>") ؛ out.print ("</tr>") ؛ } out.println ("</table>") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }}تم تنزيل رمز الخادم بواسطة DownServlet
package cn.hncu.servlets ؛ import java.io.fileinputstream ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.inputStream ؛ استيراد java.io.outputstream javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpletrequest {طلب doget public void (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {dopost (request ، response) ؛ } void void dopost (httpservletrequest request ، httpservletresponse report) يلقي servletexception ، ioException {string id = request.getParameter ("id") ؛ استجابة. photomodel p = new photodao (). getSingleById (id) ؛ if (p! = null) {string realName = p.getRealName () ؛ RealName = new String (RealName.getBytes ("ISO8859-1") ، "UTF-8") ؛ استجابة. string relpath = getServletContext (). inputStream في = new FileInputStream (relPath) ؛ outputStream Out = response.getOutputStream () ؛ system.out.println (relPath) ؛ بايت بوف [] = بايت جديد [1024] ؛ int len = 0 ؛ بينما ((len = in.read (buf))! =-1) {out.write (buf ، 0 ، len) ؛ } out.close () ؛ } آخر {desponse.setContentType ("text/html ؛ charset = utf-8") ؛ Response.getWriter (). println ("تم حذف هذا الملف!") ؛ }}}DelServlet Delete Server
package cn.hncu.servlets ؛ import java.io.file ؛ import java.io.fileInputStream ؛ import java.ioexception ؛ import java.io.inputstream ؛ import java.io.outputstream ؛ import java.io javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpletrequest {طلب doget public void (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {dopost (request ، response) ؛ } public void dopost (طلب httpservletrequest ، استجابة httpservletponse) يلقي servletexception ، ioException {request.setcharacterencoding ("utf-8") ؛ استجابة. printWriter out = response.getWriter () ؛ string id = request.getParameter ("id") ؛ photomodel p = new photodao (). getSingleById (id) ؛ if (p! = null) {if (! p.getip (). equals (request.getRemoteadDr ())) {out.println ("ليس لديك إذن لحذفه!") ؛ يعود؛ } // ※※※※ تتم إضافة الأجزاء التالية إلى الفصل التالي !!! // 1delete المعلومات الموجودة في قاعدة البيانات photodao dao = new photodao () ؛ Boolean Boo = dao.del (id) ؛ // 2delete الملف في القرص الصلب الخادم إذا (boo) {String filename = "photos/"+p.getdir ()+"/"+p.getId ()+p.getext () ؛ String pathfilename = getServletContext (). getRealPath (اسم الملف) ؛ ملف f = ملف جديد (pathfilename) ؛ if (f.exists ()) {f.delete () ؛ } string strprath = request.getContextPath ()+"/servlets/showservlet" ؛ out.println ("Photo Delete بنجاح! <a href = '"+strprath+"'> Browse Album </a>") ؛ } آخر {out.println ("فشل حذف الصورة!") ؛ }} else {response.setContentType ("text/html ؛ charset = utf-8") ؛ استجابة. getWriter (). println ("هذا الملف غير موجود!") ؛ }}}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.