Teknologi Unggah, Unduh dan Manajemen File Fungsional: 1. Gunakan XML sebagai Informasi Penyimpanan Database (DOM4J, XPATH)
2. Unggah dan unduh formulir java
3. Memecah direktori file (direktori hash adalah metode untuk mengoptimalkan kinerja penyimpanan file)
Butuh Paket Jar:
Commons-FileUpload-1.2.2.jar, Commons-io-2.1.jar, dom4j-1.6.1.jar dan jaxen-1.1-beta-6.jar
--------------------------------------------------------------------------------
Tulis index.jsp pertama
<%@ page language = "java" import = "java.util.*" pageCoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en"> <hom1> <head> <head> <title> Sistem manajemen album </title> </head> </head> </html> <head> <head> Sistem manajemen album </title> </head> </head> </head> <html> <html> <head> <itement> album manajemen album </title> </head> </head> href = "jsps/unggah.
unggah.jsp adalah halaman unduhan yang ditempatkan di direktori JSPS
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> <h1>Uploading</h1> <form action="<%=request.getContextPath()%>/servlets/UploadServlet" method="post" enctype="multipart/form-data"> File:<input type="file" name="file1"/><br/> Description:<input type="text" name="desc" /><br/> <input type="submit" value="upload" /> </form> </body> </html>
Letakkan foto.xml di direktori SRC
<? Xml Version = "1.0" encoding = "UTF-8"?> <Omoto> </shoto>
Tulis nilai objek photomodel
paket cn.hncu.demain; public class photomodel {private string id; Private String RealName; Private String ext; Private String Dir; Private String Datetime; ip string pribadi; Private String Desc; string publik getId () {return id; } public void setId (string id) {this.id = id; } public String getRealName () {return realName; } public void setRealName (String RealName) {this.RealName = RealName; } public string getext () {return ext; } public void setext (string ext) {this.ext = ext; } public String getDir () {return dir; } public void setDir (String dir) {this.dir = dir; } public String getDateTime () {return datetime; } public void setDateTime (string datetime) {this.dateTime = dateTime; } string publik getIp () {return ip; } public void setip (string ip) {this.ip = ip; } public String 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 + "]; }} Ada dua jenis alat penulisan:
Myutil (pemformatan tanggal, kode pemecahan direktori, kode ID acak)
package cn.hncu.utils;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;public class MyUtils { private MyUtils() { } private static SimpleDateFormat format=new SimpleDateFormat("yyyyy year MM month dd day hh:mm:ss"); string statis publik getCurrentDateTime () {return format.format (new date ()); } public static string getuuid () {uuid uuid = uuid.randomuuid (); String id = uuid.toString (). ReplaceAll ("-", ""); Return ID; } public static String getDir (String uuid) {string dir1 = integer.tohexString (uuid.hashcode () & 0xf); String dir2 = integer.tohexString ((uuid.hashcode () & 0xf0) >> 4); mengembalikan dir1+"/"+dir2; }}DOM4JFACTORY (Operasi Terkait DOM4J, Dapatkan Objek Dokumen, Simpan Operasi)
Paket cn.hncu.utils; impor java.io.file; impor java.io.fileInputStream; impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor orrocumaon. org.dom4j.io.outputformat; impor org.dom4j.io.saxreader; impor org.dom4j.io.xmlwriter; kelas publik dom4jfactory {dokumen statis privat dom = null; jalur string statis pribadi; static {coba {saxreader sax = saxreader baru (); // Pelajari cara memuat jalur sumber daya di bawah server (karena sumber daya kami telah diterbitkan dari myeclipse ke server Tomcat, sehingga berbeda dari proyek Java murni asli) // Gunakan kelas saat ini untuk menemukan loader kelasnya, dan kemudian menggunakan loader untuk mendapatkan jalur sumber daya = dom4jactory.class.getClasserer (). Getreta (". DOM = SAX.READ (FileInputStream baru (path)); } catch (exception e) {lempar runtimeException baru (e.getMessage (), e); }} dokumen statis public getDom () {return dom; } public static boolean save () {coba {outputFormat format = outputFormat baru (); format.setencoding ("UTF-8"); Xmlwriter w = xmlwriter baru (FileOutputStream baru (file baru (path)), format); W.Write (DOM); w.close (); Kembali Benar; } catch (Exception e) {return false; }}}Tulis photodao dari lapisan bawah
Paket cn.hncu.dao; impor java.util.arraylist; impor java.util.iterator; impor java.util.list; public org.dom4j.document; impor org.dom.element; impor cn.hncu.demain.photomodel; impor cn.hncu. boolean add (foto photomodel) {dokumen dom = dom4jfactory.getDom (); Elemen root = dom.getrooteLement (); Elemen ephoto = root.addelement ("foto"); 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 (); mengembalikan boo; } // Jelajahi Daftar Publik <Totomodel> getAll () {Document dom = dom4jFactory.getDom (); Daftar <Totomodel> Daftar = Daftar ArrayList baru <Totomodel> (); Elemen root = dom.getrooteLement (); Iterator <semem Sedang> itu = root.elementiterator (); while (it.hasnext ()) {photomodel photo = new Photomodel (); Elemen 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 (foto); } daftar pengembalian; } public photomodel getslebyId (string id) {document dom = dom4jfactory.getDom (); Daftar <Totomodel> Daftar = getAll (); untuk (foto photomodel: daftar) {if (photo.getId (). Equals (id)) {return photo; }} return null; } public boolean del (string id) {document dom = dom4jfactory.getDom (); Elemen e = (elemen) dom.selectsinglenode ("// foto [@id = '"+id.trim ()+"']"); return e.getparent (). Remove (e); }} Tulis empat servlet di akhir
UnggoadServlet mengunggah kode servlet
Paket cn.hncu.servlets; impor java.io.file; impor java.io.ioException; impor java.io.inputstream; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; impor javax.servlet.servlet. javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileitem; impor org.apache.commons.fileupload.fileuPoadeM; org.apache.commons.fileupload.disk.diskfileItemFactory; import org.apache.commons.fileupload.servlet.servletfileUpload; import org.apache.commons.io.fileutils; impor cn.hncu.dao.photoda.fileutils; cnhncu.dao.photoda.fileutils; cn.hncu.utils.myutils; unggahan kelas publik memperluas httpservlet {public void doGet (httpservletRequest, httpservletResponse response) melempar servletException, iOException {response.setContentType ("teks/html; html; charset = 2); Printwriter out = response.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transisi // en/">"); out.println ("<Html>"); out.println ("<head> <title> a servlet </iteme> </head>"); out.println ("<body>"); out.println ("Dapatkan Unggah tidak didukung!"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); Printwriter out = response.getWriter (); String path = request.getSerVletContext (). GetRealPath ("/foto"); DiskFileItemFactory Factory = DiskFileItemFactory baru (); factory.setrepository (file baru ("g:/a")); SERVLETFILEUPLOAD UEDLOAD = SERVLETFILEUPLOAD baru (pabrik); unggah. FileItem fi = null; coba {list <fileitem> list = unggah.parseRequest (permintaan); Foto Photomodel = Photomodel baru (); // Enkapsulasi Data --- 7 Atribut diperlukan boolean boo = false; Inputstream in = null; untuk (fileItem fi2: list) {fi = fi2; if (fi.isformField ()) {string desc = fi.getString ("UTF-8"); photo.setDesc (desc); // desc} else {in = fi.getInputStream (); String realname = fi.getName (); if (realname == null || realname.trim (). equals ("")) {out.print ("Tidak ada file yang dipilih!"); kembali; } if (realname.indexof ("//")! =-1) {realname = realname.substring (realname.LastIndexof ("//")+1); } photo.setrealname (realName); // nama file nyata string ext = realname.substring (realname.LastIndexof (".")); photo.setext (ext); // 3 photo.setDateTime (myutils.getCurrentDateTime ()); // 4 photo.setId (myutils.getuuid ()); // 5 photo.setdir (myutils.getdir (photo.getid ())); // 6 photo.setip (request.getremot (photo.getid ())); // 6 photo.setip (request.getremot (photo.getid ()); // 6 photo.setip (request.getRemot (photo.)); // 6 photo. Photodao dao = photodao baru (); boo = dao.add (foto); // Jika informasi foto di atas berhasil disimpan, maka Anda akan mulai menerima file gambar dan menyimpannya ke server hard disk if (boo) {system.out.println (DAO); path = path+"/"+photo.getDir (); File dir = file baru (path); if (! dir.exists ()) {dir.mkdir (); } String fileName = path+"/"+photo.getId ()+photo.getext (); Fileutils.copyInputStreamToFile (dalam, file baru (nama file)); String strpath = request.getContextPath ()+"/servlets/showerVlet"; out.print ("Diunggah dengan sukses! <a href = '"+strpath+"'> Browse album </a>"); } else {out.print ("Unggah gagal!"); }} catch (FileuploAdException e) {lempar runtimeException baru ("Unggah gagal!"); ", e);} akhirnya {if (fi! = null) {fi.delete ();}} out.flush (); out.close ();}}ShowerVlet Sisi Servlet Album Penjelajahan
Paket cn.hncu.servlets; import java.io.ioexception; impor java.io.printwriter; impor java.util.list; import javax.servlet.servletException; import javax.servlet.htp.httpservlet; impor javax.servlet javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDao;import cn.hncu.demain.PhotoModel;public class ShowServlet extends HttpServlet { IOException if an error occurred public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); request.setcharacterencoding ("UTF-8"); Printwriter out = response.getWriter (); out.println ("<! Doctype html public/"-// w3c // dtd html 4.01 transisi // en/">"); out.println ("<Html>"); out.println ("<head> <title> a servlet </iteme> </head>"); out.println ("<body>"); String table = "<tabel border = '1' width = '100%'>"+ "<tr> <t th> Nama file </t> <t th> unggah ip </t> <t th> waktu unggah </t> <tr> gambar </t> <t> instruksi </t> <t> Operasi </th> </tr>"; out.print (tabel); Photodao dao = photodao baru (); Daftar <Totomodel> Daftar = dao.getall (); untuk (photomodel p: list) {out.print ("<tr>"); out.println ("<td>"+p.getRealName ()+"</td>"); out.println ("<td>"+p.getip ()+"</td>"); out.println ("<td>"+p.getDateTime ()+"</td>"); // output gambar string path = request.getContextPath ()+"/foto/"+p.getDir ()+"/"+p.getId ()+p.getext (); out.println ("<td> <a href = '"+path+"'> <img src = '"+path+"' width = '200' height = '200'> </mg> </a> </td>"); String op = "<a href = '"+request.getContextPath ()+"/servlets/delservlet? Id ="+p.getId ()+"'> hapus </a>"; out.println ("<td>"+p.getdesc ()+"</td>"); op+= "<a href = '"+request.getContextPath ()+"/servlets/downservlet? id ="+p.getId ()+"'> Unduh </a>"; out.println ("<td>"+op+"</td>"); out.print ("</tr>"); } out.println ("</boable>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Kode server diunduh oleh Downservlet
Paket cn.hncu.servlets; import java.io.fileInputStream; import java.io.fileoutputStream; import java.io.ioException; impor java.io.inputStream; impor java.io.outputstream; impor java.io.printwriter; impor java.net. javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; impor cnn.nncu.dao.htppservletse; impor cn.hncu.dao.daoo; cn.hncu.demain.photomodel; kelas publik downservlet memperluas httpservlet {public void doGet (httpservletRequest, respons httpservletResponse); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string id = request.getParameter ("id"); response.setContentType ("aplikasi/force-download"); Photomodel p = fotodao baru (). Getsinglebyid (id); if (p! = null) {string realname = p.getRealName (); realName = string baru (realname.getbytes ("iso8859-1"), "UTF-8"); response.setHeader ("Disposisi Konten", "lampiran; fileName =/" "+RealName+"/""); String relpath = getSerVletContext (). GetRealPath ("/foto/"+p.getDir ()+"/"+p.getId ()+p.getext ()); InputStream in = new FileInputStream (RelPath); OutputStream out = response.getoutputStream (); System.out.println (RelPath); byte buf [] = byte baru [1024]; int len = 0; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.close (); } else {response.setContentType ("Teks/html; charset = utf-8"); response.getWriter (). println ("File ini telah dihapus!"); }}}Delservlet Delete Server
Paket cn.hncu.servlets; import java.io.file; impor java.io.fileInputStream; impor java.io.ioException; import java.io.inputStream; impor java.io.outputstream; impor java.o.printwriter; impor javax.servlet. javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; impor javax.servlet.http.httpservletresponse; impor cn.ompot; Httpservlet {public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {request.setcharacterencoding ("UTF-8"); response.setContentType ("Teks/html; charset = utf-8"); Printwriter out = response.getWriter (); String id = request.getParameter ("id"); Photomodel p = fotodao baru (). Getsinglebyid (id); if (p! = null) {if (! p.getip (). equals (request.getRemoteAddr ())) {out.println ("Anda tidak memiliki izin untuk menghapusnya!"); kembali; } // ※※※※ Bagian -bagian berikut ditambahkan ke kelas berikut !!! // 1 -delete informasi dalam basis data photodao dao = photodao baru (); boolean boo = dao.del (id); // 2delete file di server hard disk if (boo) {string fileName = "foto/"+p.getDir ()+"/"+p.getId ()+p.getext (); String pathfileName = getSerVletContext (). GetRealPath (fileName); File f = file baru (PathFileName); if (f.exists ()) {f.delete (); } String strpath = request.getContextPath ()+"/servlets/showerVlet"; out.println ("Foto menghapus dengan sukses! <a href = '"+strpath+"'> browse album </a>"); } else {out.println ("Foto Delete Gagal!"); }} else {response.setContentType ("text/html; charset = utf-8"); response.getWriter (). println ("File ini tidak ada!"); }}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.