การเขียนอัลบั้ม Simple Cloud เวอร์ชัน Java ฟังก์ชั่นที่นำมาใช้คือ:
ผู้ใช้สามารถอัปโหลดหนึ่งไฟล์ได้ทีละไฟล์
ผู้ใช้สามารถดาวน์โหลดรูปภาพที่อัปโหลดโดยผู้อื่น
ผู้ใช้สามารถดูรูปภาพของคนอื่นได้
ผู้ใช้สามารถลบรูปภาพที่อัปโหลดผ่าน IP ของตนเองเท่านั้น
เทคนิคที่ใช้:
การอัปโหลดและดาวน์โหลดไฟล์, โหมดการออกแบบ, DOM4J, XPath ฯลฯ
มาดูสองหน้าถัดไป:
ซอร์สโค้ด:
web.xml:
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://ww.w3.org/200 xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" <servlet-class> cn.hncu.servlets.uploadservlet </servlet-class> </servlet> <servlet> <servlet-name> CloudPhotoservlet </servlet-name> <servlet-class> cn.hncu.servlets.downservlet </servlet-class> </servlet> <servlet> <servlet-name> delservlet </servlet-name> <servlet-lass> cn.hncu.servlets.delservlet </servlet-lass> <url-pattern>/upload </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> CloudPhotoservlet </servlet-name> <url-pattern>/cloudphoto </url-pattern> </servlet-mapping> <url-pattern>/servlet/downsertlet </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> delservlet </servlet-name> <url-pattern>/servlet/delservlet </url-pattern> </welcome-file-list> </eb-app>
index.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> input.parentelement.parentelement.parentelement; // table.nodename tbody Table.removeChild (input.parentelement.parentelement); } var t = 1; ฟังก์ชั่น addFile (อินพุต) {tr = input.parentelement.parentelement; //alert(tr.nodename); var str = "<td> เลือกไฟล์: </td>"+ "<td> <อินพุต type = 'file' name = 'file"+ t+ "'> </td>"+ "<td> ไฟล์คำอธิบาย: </td>"+ "<td> onclick = 'delfile (นี่)'> </td> "; tr.insertadjacenthtml ("befendbegin", str); } ฟังก์ชั่นย้าย () {window.location.href = "/myphoto/cloudphoto"; } </script> <style type = "text/css"> #font {color: red; } </style> </head> <body> <h1> <font id = "font"> อัลบั้มอัปโหลด: </font> </h1> <form action = "/myphoto/upload" method = "post" enctype = "multipart/form-data"> <table> <td> <td> <td> ไฟล์คำอธิบาย: </td> <td> <อินพุต type = "text" name = "text1"> </td> <td> <อินพุต type = "ปุ่ม" value = "ลบไฟล์" onClick = "delfile (นี่)"> </td> type = "button" value = "เพิ่มไฟล์" onclick = "addfile (this)"> </td> </tr> </table> </form> <form action = "/myphoto/cloudphoto" method = "post" enctype = "multipart/form-data" onclick = "move ()"> </td> </tr> </table> </form> </body> </html>photo.xml:
<? xml version = "1.0" encoding = "utf-8"?> <photos> </potos>
myutils.java:
แพ็คเกจ cn.hncu.utils; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า java.util.uuid; คลาสสาธารณะ myutils { / ** * @return ได้รับ uuid * / สตริงคงที่สาธารณะ } / ** * @param uuid * @return รับเส้นทางที่แตกผ่าน uuid * / สตริงคงที่สาธารณะ getDir (สตริง uuid) {string dir1 = integer.tohexstring (uuid.hashcode () & 0xf); String dir2 = integer.tohexstring ((uuid.hashCode () & 0xf0) >> 4); ส่งคืน "/"+dir1+"/"+dir2; } // รูปแบบวันที่เวลาส่วนตัวคงที่ SimpledateFormat SDF = ใหม่ SimpledateFormat ("Yyyyy Year MM เดือน DD วันที่ HH: MM: SS"); / *** @return ส่งคืนวันที่และเวลาเมื่ออัปโหลด*/ สตริงคงที่สาธารณะ getCurrentDateTime () {return sdf.format (วันที่ใหม่ ()); -dom4jfactory.java:
แพ็คเกจ cn.hncu.utils; นำเข้า java.io.fileinputstream; นำเข้า java.io.filenotfoundexception; นำเข้า java.io.fileoutputstream นำเข้า java.io.ioException; นำเข้า java.io.unsupportencodexception; org.dom4j.element; นำเข้า org.dom4j.node; นำเข้า org.dom4j.io.saxreader; นำเข้า org.dom4j.io.xmlwriter; คลาสสาธารณะ dom4jfactory {เอกสารคงที่ส่วนตัว dom = null; เส้นทางสตริงคงที่ส่วนตัว; // บล็อกคงที่! จะวิ่งเพียงครั้งเดียว! คุณลักษณะคือเมื่อคลาสถูกโหลด, คงที่ {ลอง {saxReader sax = new SaxReader () ถูกดำเนินการ; // เนื่องจากทรัพยากรของเราได้รับการเผยแพร่จาก myelipse ไปยังเซิร์ฟเวอร์ Tomcat จึงแตกต่างจากโครงการ Java บริสุทธิ์ดั้งเดิม // ใช้คลาสปัจจุบันเพื่อค้นหาตัวโหลดคลาสจากนั้นรับพา ธ ทรัพยากรผ่านตัวโหลดคลาส path = dom4jfactory.class.getclassloader (). getResource ("photo.xml"). getPath (); // getClassLoader () ส่งคืน: การโหลดคลาสโหลดเดอร์ของคลาสหรืออินเตอร์เฟสที่แสดงโดยวัตถุนี้ // URL สาธารณะ getResource (ชื่อสตริง) ส่งคืน: การอ่านวัตถุ URL ของทรัพยากร; หากไม่พบทรัพยากรหรือผู้โทรไม่ได้รับอนุญาตเพียงพอที่จะได้รับทรัพยากรให้ส่งคืนค่า NULL // วิธีนี้ค้นหาตัวโหลดคลาสแม่ของทรัพยากรเป็นครั้งแรก หากตัวโหลดคลาสแม่เป็นโมฆะเส้นทางการค้นหาเป็นเส้นทางของตัวโหลดคลาส Virtual Machine ของเครื่อง // Public String getPath () ได้รับส่วนหนึ่งของ URL นี้ System.out.println (เส้นทาง); dom = sax.read (ใหม่ fileInputStream (พา ธ )); } catch (filenotfoundexception e) {โยน runtimeException ใหม่ (e); } catch (documentException e) {โยน runtimeException ใหม่ (e); }} / ** * @return รับเอกสารของอัลบั้ม * / เอกสารคงที่สาธารณะ getDocument () {return dom; } / ** * บันทึก photo.xml และบันทึกลงใน local * / public Static Boolean save () {ลอง {xmlWriter w = ใหม่ xmlWriter (ใหม่ fileOutputStream (พา ธ )); W.Write (DOM); w.close (); กลับมาจริง; } catch (unsupportencodingexception e) {return false; } catch (filenotfoundexception e) {return false; } catch (ioexception e) {return false; }} บูลีนแบบคงที่สาธารณะ del (string uuid) {node node = dom.selectsingLenode ("[@uuid = '" uuid+"']"); if (node == null) {return false; } node.getParent (). ลบ (โหนด); กลับมาจริง; } / *** ทดสอบ* @param args* / โมฆะคงที่สาธารณะหลัก (สตริง [] args) {system.out.println (getDocument ()); -photomodel.java - วัตถุค่า
แพ็คเกจ cn.hncu.domain;/*** การห่อหุ้มวัตถุค่า* @author chen haoxiang* 2016-7-24*/คลาสสาธารณะ photomodel {สตริงส่วนตัว uuid; // uuid สตริงส่วนตัว realname = ""; // ชื่อไฟล์จริง การอัปโหลดไฟล์สตริงส่วนตัว ip; // uploader ip private string desc; // ไฟล์คำอธิบายสตริงสาธารณะ getuuid () {return uuid; } โมฆะสาธารณะ setuuid (string uuid) {this.uuid = uuid; } สตริงสาธารณะ getRealName () {return realName; } โมฆะสาธารณะ setRealName (String RealName) {this.realName = realName; } สตริงสาธารณะ getExt () {return ext; } โมฆะสาธารณะ setext (String ext) {this.ext = ext; } สตริงสาธารณะ getDir () {return dir; } โมฆะสาธารณะ setDir (สตริง dir) {this.dir = dir; } สตริงสาธารณะ getDateTime () {ส่งคืนวันที่; } โมฆะสาธารณะ setDateTime (String DateTime) {this.dateTime = DateTime; } สตริงสาธารณะ getip () {return ip; } โมฆะสาธารณะ setip (string ip) {this.ip = ip; } สตริงสาธารณะ getDesc () {return desc; } โมฆะสาธารณะ setDesc (String desc) {this.desc = desc; } @Override สตริงสาธารณะ toString () {return "photomodel [uuid =" + uuid + ", realname =" + realname + ", ext =" + ext + ", dir =" + dir + ", datetime =" + datetime + ", ip =" + ip + ", desc =" + " -PhotoDao.java:
แพ็คเกจ cn.hncu.photodao.dao; นำเข้า java.util.list; นำเข้า cn.hncu.domain.photomodel; อินเทอร์เฟซสาธารณะ PhotoDao { / *** @param Photo* @return บันทึกข้อมูล* / บูลีนสาธารณะบันทึก (โฟโตโมเดลรูปภาพ); / *** @return ส่งคืนข้อมูลรูปภาพทั้งหมด*/ รายการสาธารณะ <Photomodel> getAll (); / *** @param uuid* @return ค้นหาวัตถุค่าที่ห่อหุ้มผ่าน uuid*/ phothomodel สาธารณะ getSingleByUUID (String uuid); / ** * @param uuid * @return ลบข้อมูลของภาพใน photos.xml ผ่าน uuid */ บูลีนสาธารณะ deletexml (สตริง uuid); / ** * @param dir * @return ลบข้อมูลของภาพในดิสก์เซิร์ฟเวอร์ผ่านเส้นทาง */ บูลีนสาธารณะ deleetefile (สตริง pathfileName);}photoserimpl.java:
แพ็คเกจ cn.hncu.photodao.impl; นำเข้า java.io.file; นำเข้า java.util.arraylist; นำเข้า java.util.iterator; นำเข้า java.util.list; นำเข้า org.dom4j.document; นำเข้า org.dom4j.element; cn.hncu.photodao.dao.photodao; นำเข้า cn.hncu.utils.dom4jfactory; photoserimpl ระดับสาธารณะใช้ photoDao {@Override บูลีนสาธารณะบันทึก (PhotoModel Photo) Element root = dom.getRootelement (); // เพิ่มองค์ประกอบแอตทริบิวต์ p = root.addelement ("photo"); p.addattribute ("uuid", photo.getuuid ()); p.addattribute ("realname", photo.getRealName ()); P.AdDattribute ("DateTime", photo.getDateTime ()); P.AdDattribute ("IP", photo.getip ()); p.addattribute ("ext", photo.getext ()); p.addattribute ("dir", photo.getdir ()); p.addattribute ("desc", photo.getdesc ()); ส่งคืน dom4jfactory.save (); } @Override รายการสาธารณะ <HotoModel> getAll () {รายการ <PhotoModel> list = new ArrayList <Photomodel> (); เอกสาร dom = dom4jfactory.getDocument (); Element root = dom.getRootelement (); Iterator <Element> it = root.ElementIterator ("photo"); // รับตัววนซ้ำขององค์ประกอบรูปภาพผ่าน DOM4J และคุณยังสามารถค้นหารูปภาพทั้งหมดผ่าน XPath // รายการ <node> lists = dom.selectNodes ("// photo [@UUID]"); // iterator <node> it = lists.iterator (); ในขณะที่ (it.hasnext ()) {element e = it.next (); Photomodel Photo = New Photomodel (); photo.setuuid (e.attributeValue ("uuid")); photo.setRealName (e.attributeValue ("realname")); photo.setDateTime (E.AttributeValue ("DateTime")); photo.setext (e.attributeValue ("ext")); photo.setip (E.AttributeValue ("IP")); photo.setdir (e.attributeValue ("dir")); photo.setdesc (e.attributeValue ("desc")); list.add (รูปภาพ); } return list; } @Override photomodel สาธารณะ getSingleByUUID (สตริง uuid) {list <hotomodel> photos = getAll (); สำหรับ (PhotoModel Photo: Photos) {ถ้า (photo.getuuid (). เท่ากับ (uuid)) {return photo; }} return null; } @Override บูลีนสาธารณะ deletexml (สตริง uuid) {document dom = dom4jfactory.getDocument (); องค์ประกอบ e = (องค์ประกอบ) dom.selectsingLenode ("// photo [@uuid = '" uuid.trim ()+"']"); return e.getParent (). ลบ (e); } @Override บูลีนสาธารณะ DELETEFILE (สตริง pathFileName) {ลอง {ไฟล์ไฟล์ = ไฟล์ใหม่ (pathFileName); if (file.exists ()) {file.delete (); } return true; } catch (exception e) {return false; -photodaofactory.java:
แพ็คเกจ cn.hncu.photodao.factory; นำเข้า cn.hncu.photodao.impl.photoserimpl;/*** วิธีการเป็นโรงงาน* @author Chen Haoxiang* 2016-7-24*/photodaofactory {photoserimpl -uploadservlet.java:
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.list; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.http.https javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.apache.commons.fileupload.fileitem; นำเข้า org.apache.Commons.fileupload org.apache.commons.fileupload.disk.diskfileitemfactory; นำเข้า org.apache.commons.fileupload.servlet.servletfileupload; นำเข้า cn.hncu.domain.photomodel; cn.hncu.photodao.factory.photodaofactory; นำเข้า cn.hncu.utils.dom4jfactory; นำเข้า cn.hncu.utils.myutils; ระดับสาธารณะ uploadservlet ขยาย httpservlet Response.setContentType ("ข้อความ/html; charset = utf-8"); Response.getWriter (). พิมพ์ ("<H1> ขออภัยหน้านี้ไม่รองรับการเข้าถึง !!! </h1>"); Response.getWriter (). พิมพ์ ("<a href = 'JavaScript: history.go (-1)'> กลับไปที่หน้าก่อนหน้า </a>"); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {response.setContentType ("text/html; charset = utf-8"); printwriter สุดท้าย out = response.getWriter (); // การส่งแบบฟอร์ม anti-black-non-multipart // ใช้เครื่องมืออัปโหลดเครื่องมือบูลีนบูล = servletfileupload.ismultipartcontent (คำขอ); if (! boo) {out.print ("<H1> ไม่สนับสนุนวิธีการส่งของแบบฟอร์มทั่วไป! </h1>"); กลับ; } ไฟล์ไฟล์ = ไฟล์ใหม่ ("d:/photocache"); if (! file.exists ()) {file.mkdir (); } diskfileitemfactory fifactory = ใหม่ diskfileitemfactory (1024*10, ไฟล์); ServletFileUpload Upload = ใหม่ servletFilePilePload (Fifactory); upload.SetheAderEncoding ("UTF-8"); // ตั้งชื่อไฟล์การเข้ารหัสเส้นทางสตริง = getServletContext (). getRealPath ("/photos"); fileItem fi = null; ลอง {list <fileItem> list = upload.parserequest (คำขอ); PhotoModel Photo = new Photomodel (); // การห่อหุ้มข้อมูล --- 7 คุณสมบัติจำเป็นต้องใช้ photo.setRealName (""); int cont = 0; สำหรับ (fileitem f: list) {if (cont! = 0 && cont%2 == 0 &&! photo.getRealName (). equals ("")) {photo = new Photomodel (); // re-data encapsulation} fi = f; if (fi.isformfield ()) {// องค์ประกอบฟอร์มปกติ // รับไฟล์คำอธิบายสตริง desc = fi.getString ("UTF-8"); photo.setDesc (desc); //#1} else {// anti-black 3-ถ้าไฟล์ไม่ได้เลือกในส่วนประกอบไฟล์ถ้า (fi.getSize () == 0) {photo.setRealName (""); cont ++; ดำเนินการต่อ; } string filename = fi.getName (); filename = filename.substring (filename.lastindexof ("//")+1); // ชื่อไฟล์จริง photo.setRealName (ชื่อไฟล์); //#2 string ext = filename.substring (filename.lastindexof ("."); photo.setDateTime (myUtils.getCurrentDateTime ()); //#4 photo.setip (request.getRemoteaddr ()); //#5 สตริง uuid = myUtils.getUuid (); photo.setuuid (uuid); //#6 photo.setdir (myutils.getdir (uuid)); //#7 // รบกวนไฟล์ไดเรกทอรี dfile = ไฟล์ใหม่ (path+photo.getDir ()); if (! dfile.exists ()) {dfile.mkdir (); } fi.write (ไฟล์ใหม่ (path+photo.getdir ()+"/"+photo.getuuid ()+photo.getext ())); } cont ++; if (cont%2 == 0 &&! photo.getRealName (). เท่ากับ ("")) {photodao dao = photodaofactory.getphotodao (); boo = dao.save (ภาพถ่าย); // บันทึกลงในดิสก์ - วิธีที่ 2: fileutils.copyInputStreamTofile (ใน, ไฟล์ใหม่ (filename2)); // ※ 2 ※การจัดเก็บไฟล์ภาพลงในเซิร์ฟเวอร์ฮาร์ดดิสก์ภาพถ่าย = photomodel ใหม่ (); // encapsulation}}} catch } catch (exception e) {e.printstacktrace (); } ในที่สุด {ถ้า (fi! = null) {fi.delete (); } if (dom4jfactory.save ()) {out.print ("<h1> อัปโหลดสำเร็จ! </h1>"); out.print ("<a href = 'JavaScript: history.go (-1)'> กลับไปที่หน้าก่อนหน้า </a>"); } else {out.print ("<h1> การอัปโหลดล้มเหลว! </h1>"); out.print ("<a href = 'JavaScript: history.go (-1)'> กลับไปที่หน้าก่อนหน้า </a>"); -แสดงไฟล์ทั้งหมด -cloudphotoservlet.java
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.list; นำเข้า javax.servlet.servletexception; นำเข้า javax.servlet.http.httpservlet; javax.servlet.http.httpservletresponse; นำเข้า cn.hncu.domain.photomodel; นำเข้า cn.hncu.photodao.dao.photodao; นำเข้า cn.hncu.photodao.factory.photodaofactory; DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string pwd = (string) request.getParameter ("pwd"); if ("CHX" .Equals (PWD)) {dopost (คำขอ, การตอบกลับ); } else {response.setContentType ("text/html; charset = utf-8"); Response.getWriter (). พิมพ์ ("<H1> ขออภัยคุณไม่ได้รับอนุญาตให้เข้าถึง !!! </h1>"); }} โมฆะสาธารณะ dopost (คำขอ httpservletrequest, httpservletResponse การตอบสนอง) พ่น servletexception, ioexception {response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); out.println ("<! doctype html สาธารณะ/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<head> <title> อัลบั้ม chx Cloud </title> </head>"); out.println ("<body>"); out.println ("<table border = '1px; double;#ff0000'>"); out.println ("<tr>"); out.println ("<tr>"); out.println ("<td> ชื่อไฟล์ </td>"); out.println ("<td> เวลาอัปโหลด"); out.println ("<td> ไฟล์ </td>"); out.println ("<td> คำอธิบายไฟล์ </td>"); out.println ("<td> การดำเนินการ </td>"); out.println ("</tr>"); สตริง tdwh = "style = 'width: 200px; ความสูง: 200px;'"; // แสดงรูปภาพทั้งหมด photoDao dao = photodaofactory.getphotodao (); รายการ <Photomodel> photos = dao.getall (); สำหรับ (PhotoModel Photo: Photos) {String filename = photo.getRealName (); String time = photo.getDateTime (); // เอาท์พุทรูปภาพสตริงพา ธ = request.getContextPath () + "/photos/" + photo.getDir () + "/" + photo.getUuid () + photo.getext (); // system.out.println (เส้นทาง); ///myphoto/photos//7/c/a1237a48a6aa451cb22fa78b15bafcea.jpg สตริง img = "<a href = '" + path + "> <img src ='" path + "'/> </a>"; String desc = photo.getDesc (); String delstr = "<a href = '/myphoto/servlet/delservlet? uuid =" + photo.getuuid () + "'> ลบ </a>"; String downstr = "<a href = '/myphoto/servlet/downservlet? uuid =" + photo.getuuid () + "'> ดาวน์โหลด </a>"; out.println ("<td" + tdwh + ">" + filename + "</td>"); out.println ("<td" + tdwh + ">" + เวลา + "</td>"); out.println ("<td" + tdwh + ">" + img + "</td>"); out.println ("<td" + tdwh + ">" + desc + "</td>"); out.println ("<td" + tdwh + ">" + delstr + "" + downstr + "</td>"); out.println ("</tr>"); } out.println ("<tr>"); out.println ("</tr>"); out.println ("</table>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); -ลบไฟล์ - delservlet.java
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; javax.servlet.http.httpservletResponse; นำเข้า cn.hncu.domain.photomodel; นำเข้า cn.hncu.photodao.dao.photodao; นำเข้า cn.hncu.photodao.fotor.photodaofactory; photodaofactory.getphotodao (); โมฆะสาธารณะ DOGET (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string uuid = request.getParameter ("uuid"); string ip = request.getRemoteaddr (); Response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); Photomodel Photo = dao.getsinglebyuuid (uuid); if (photo! = null) {ถ้า (! photo.getip (). เท่ากับ (ip)) {out.print ("<h1> คุณไม่ได้รับอนุญาตให้ลบไฟล์นี้!! </h1>"); out.print ("<a href = 'JavaScript: history.go (-1)'> กลับไปที่หน้าก่อนหน้า </a>"); กลับ ; } // 1 ลบข้อมูลในฐานข้อมูลบูลีนบู = dao.deleetexml (uuid); if (boo) {string filename = "photos/"+photo.getdir ()+"/"+photo.getuuid ()+photo.getext (); สตริง pathFileName = getServletContext (). getRealPath (ชื่อไฟล์); if (dao.deleteFile (pathfileName)) {// เปลี่ยนเส้นทางไปยังการตอบสนองของหน้าอัลบั้ม Sendredirect ("/myphoto/cloudphoto? pwd = chx"); } else {out.print ("<h1> ไม่สามารถลบออกจากเซิร์ฟเวอร์ไฟล์กำลังถูกครอบครอง !!! </h1>"); out.print ("<a href = 'JavaScript: history.go (-1)'> กลับไปที่หน้าก่อนหน้า </a>"); }} else {out.print ("<h1> ไฟล์ไม่มีอยู่อีกต่อไป !!! </h1>"); out.print ("<a href = 'JavaScript: history.go (-1)'> กลับไปที่หน้าก่อนหน้า </a>"); -ดาวน์โหลดไฟล์ -downservlet.java
แพ็คเกจ cn.hncu.servlets; นำเข้า java.io.fileinputstream; นำเข้า java.io.ioexception; นำเข้า java.io.InputStream; นำเข้า java.io.OutputStream; นำเข้า Java.net.urlencoder; นำเข้า Javax.servlete javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า cn.hncu.domain.photomodel; นำเข้า cn.hncu.photodao.dao.photodao; Downservlet ขยาย httpservlet {private photoDao dao = photodaofactory.getphotodao (); โมฆะสาธารณะ DOGET (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string uuid = request.getParameter ("uuid"); System.out.println (uuid); Photomodel Photo = dao.getsinglebyuuid (uuid); System.out.println (ภาพถ่าย); if (photo! = null) {// ตั้งค่าส่วนหัวตอบกลับ-ตัวรับสัญญาณ-เมื่อเบราว์เซอร์เห็นส่วนหัวการตอบกลับนี้มันจะเปิดโปรแกรมดาวน์โหลดที่คิดว่าคือ // (ถ้า Thunder ได้รับการยอมรับทันเดอร์จะเปิดโดยอัตโนมัติ String realName = photo.getRealName (); string agent = request.getheader ("ผู้ใช้ตัวแทน"); System.out.println (ตัวแทน); if (agent.indexof ("mozilla")! =-1) {// firefox browser response.setheader ("เนื้อหา-การจัดสรร", "สิ่งที่แนบมา; filename ="+ สตริงใหม่ (realname.getBytes ("GB2312"), "ISO-8859-1")); } else {// แก้ปัญหาของภาษาจีนที่อ่านไม่ออก (เพียงแค่ใช้ประโยคต่อไปนี้เพื่อเข้ารหัสชื่อไฟล์) realName = urlencoder.encode (realName, "UTF-8"); // ใช้กลไกการเข้ารหัสที่ระบุเพื่อแปลงสตริงเป็นแอปพลิเคชัน Response.SetheAder ("เนื้อหา-การจัดสรร", "เอกสารแนบ; ชื่อไฟล์ =/" "+realName+"/""); // หมายเหตุ: "cttachment;" ไม่สามารถหายไปได้มิฉะนั้นเบราว์เซอร์จะเปิดโดยตรงในหน้าต่างใหม่} สตริง filename = "Photos/"+photo.getDir ()+"/"+photo.getUuid ()+photo.getext (); สตริง pathFileName = getServletContext (). getRealPath (ชื่อไฟล์); inputStream ใน = new FileInputStream (pathFileName); outputStream out = response.getOutputStream (); byte buf [] = ไบต์ใหม่ [2048]; int len = 0; ในขณะที่ ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.close (); in.close (); } else {response.setContentType ("text/html; charset = utf-8"); Response.getWriter (). println ("<H1> ไฟล์นี้ถูกลบ </h1>"); -ผลการสาธิต
ฉันจะไม่แสดงสิ่งนี้มีรูปภาพอยู่ข้างหน้าและฉันได้ให้รหัสแหล่งที่มาทั้งหมด หากคุณสนใจคุณสามารถทำการปรับปรุงด้วยตัวเอง
ในความเป็นจริงสิ่งนี้สามารถอัปโหลดไฟล์ประเภทอื่น ๆ ได้เนื่องจากเราไม่มีชื่อต่อท้ายป้องกันและเราใช้การสตรีมอักขระเพื่อส่งสัญญาณและมันจะไม่บิดเบือน (สามารถประมวลผลเป็นดิสก์คลาวด์ ~~)! -
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น