Menulis versi Java dari album cloud sederhana, fungsi yang diimplementasikan adalah:
Pengguna dapat mengunggah satu ke beberapa file sekaligus.
Pengguna dapat mengunduh gambar yang diunggah oleh orang lain.
Pengguna dapat melihat gambar orang lain.
Pengguna hanya dapat menghapus gambar yang diunggah melalui IP mereka sendiri.
Teknik yang digunakan:
Unggah dan unduh file, mode desain, dom4j, xpath, dll.
Mari kita lihat dua halaman berikutnya:
Kode Sumber:
Web.xml:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Web-app Versi = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/www.w3.org/org/2001 =" http:/www.w3.org/org/p21 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>cn.hncu.servlets.UploadServlet</servlet-class> </servlet> <servlet> <servlet-name>cloudPhotoServlet</servlet-name> <servlet-class>cn.hncu.servlets.cloudPhotoServlet</servlet-class> </servlet> <servlet> <servlet-name>DownServlet</servlet-name> <servlet-class>cn.hncu.servlets.DownServlet</servlet-class> </servlet> <servlet> <servlet-name>DelServlet</servlet-name> <servlet-class>cn.hncu.servlets.DelServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <RURL-PATERS>/UEDLOAD </RURL-PATERS> </SERVLET-MAPPING> <Servlet-Mapping> <servlet-name> cloudphotoSerVlet </servlet-name> <rerl-pattern>/cloudphoto </rerl-pattern> </servlet-mapping> <servlet-name> <servlet-Mapping> </servlet> </servlet-mapping> <rerl-pola>/servlet/downservlet </rerl-pattern> </servlet-Mapping> <servlet-Mapping> <servlet-name> delservlet </servlet-name> <roull-pola>/servlet/delservlet </rsp-Pattern> </servlet-Mapping> <creading-file-file-file-file> </URRSPS.JSP.JSPLET> </servlet-mapping> <creading-file-file-file </delservlet> </URL-PATER> </SERVLET-Papping> <creading-file-file-File> <cread-file> </URL-PATERS> </Servlet-Mapping> <creading-file-file-file </delservlet>
index.jsp:
<%@ page language = "java" impor = "java.util.*" pageEncoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi//en"> <html> <head> <titeme> Cloud album Cloud </title> <" input.parentelement.parentelement.parentelement; // table.nodename tbody table.removechild (input.parentelement.parentelement); } var t = 1; fungsi addFile (input) {tr = input.parentElement.parentElement; //alert(tr.nodename); var str = "<td> Pilih file: </td>"+ "<td> <input type = 'file' name = 'file"+ t+ "'> </td>"+ "<td> Deskripsi file: </td>"+ "<td> <input type = 'Text' name = 'Text"+ T+ "'> </td>"+ "+" TEPPET = TEXT = TEXT "TEXT"+ T+ "> </td>"+ "+"+ "TEPPET = TEXT = TEXT" TEXT "+ T+"> </TD> "+"+ "+"+ "TEPPET = TEXT = TEXT" TEXT "+ T+"> </td> onClick = 'delfile (this)'> </td> "; tr.InsertAdJacentHtml ("sebelum Bobegin", str); } function move () {window.location.href = "/myphoto/cloudphoto"; } </script> <style type = "text/css"> #font {color: red; } </tyle> </head> <body> <h1> <font id = "font"> unggah album: </font> </h1> <form Action = "/myphoto/unggah" Metode = "POST" ENCTYPE = "Multipart/Form-Data"> <Table> <tr> <t> File Pilih: </td> </td "> <Table> <tr> <td> File Pilih: </td> </td"> <Table> <tr> <td> File Selec <td> File description: </td> <td> <input type="text" name="text1"> </td> <td> <input type="button" value="delete file" onclick="delFile(this)"> </td> </tr> <tr> <td colspan=2> <input type="submit" value="upload file"> </td> <td colspan = 3> <input type = "Tombol" value = "Tambah file" onclick = "addFile (this)"> </td> </tr> </able> </form> <form Action = "/myphoto/cloudphoto" Metode = "POST" ENCTYPE = "Multipart/Form-Data"> <table> <TABUT "TRANP =" TD "TD =" Multiply/Form-DATA "> <TABLE> <TABUT" TD "TD/" TD "" TD "" TD "" TRAN "MITUP =" MITIBAR/Form-DATA "> <TABLE"> <" OnClick = "MOVE ()"> </td> </tr> </able> </form> </body> </html>photo.xml:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Omoto> </shoto>
Myutils.java:
Paket cn.hncu.utils; impor java.text.simpledateFormat; impor java.util.date; import java.util.uuid; kelas publik myutils { / ** * @RandomUrn) ("getosr getosr {return uUid.Randomuid ()." } / ** * @param uuid * @return Dapatkan jalur yang rusak melalui uuid * / public static string getDir (string uuid) {string dir1 = integer.toHexString (uuid.hashcode () & 0xf); String dir2 = integer.tohexString ((uuid.hashcode () & 0xf0) >> 4); return "/"+dir1+"/"+dir2; } // format tanggal-waktu private static SimpleDateFormat sdf = new SimpleDateFormat ("yyyyy tahun mm bulan dd tanggal hh: mm: ss"); / *** @return Mengembalikan tanggal dan waktu saat mengunggah*/ string statis public getCurrentDateTime () {return sdf.format (tanggal baru ()); }}Dom4jfactory.java:
Paket cn.hncu.utils; impor java.io.fileinputstream; impor java.io.filenotfoundException; impor java.io.fileoutputStream; import Java.io.ioException; impor Java.unsupportedenceDEnceptionedException; impor; org.domionj.domjoIon; Import; Import; Imporcument; Import; Import; Impor, Impor, Impor. org.dom4j.element; impor org.dom4j.node; impor org.dom4j.io.saxreader; impor org.dom4j.io.xmlwriter; kelas publik dom4jfactory {dokumen statis pribadi dom = null; jalur string statis pribadi; // blok statis! Hanya akan berjalan sekali! Fiturnya adalah bahwa ketika kelas dimuat, statis {coba {saxreader sax = saxreader baru () dieksekusi; // Karena sumber daya kami telah diterbitkan dari MyElipse ke server Tomcat, itu berbeda dari proyek Java murni asli. // Gunakan kelas saat ini untuk menemukan loader kelasnya, dan kemudian dapatkan jalur sumber daya melalui loader kelas. path = dom4jfactory.class.getClassLoader (). getResource ("photo.xml"). getPath (); // getClassLoader () Returns: Memuat class loader kelas atau antarmuka yang diwakili oleh objek ini // URL publik getResource (nama string) Pengembalian: Membaca objek URL sumber daya; Jika sumber daya tidak dapat ditemukan, atau penelepon tidak memiliki cukup izin untuk mendapatkan sumber daya, kembalikan nol. // Metode ini pertama -tama mencari loader kelas induk sumber daya; Jika loader kelas induk adalah nol, jalur pencarian adalah jalur loader kelas bawaan mesin virtual. // string publik getPath () mendapatkan bagian jalur dari URL ini. System.out.println (path); DOM = SAX.READ (FileInputStream baru (path)); } catch (FileNotFoundException e) {lempar runtimeException baru (e); } catch (DocumentException e) {throw runtimeException baru (e); }} / ** * @return Dapatkan dokumen album * / dokumen statis public getDocument () {return dom; } / ** * Simpan photo.xml dan simpan ke lokal * / public static boolean simpan () {coba {xmlwriter w = xmlwriter baru (fileoutputStream baru (path)); W.Write (DOM); w.close (); Kembali Benar; } catch (UnsupportedencodingException e) {return false; } catch (FileNotFoundException e) {return false; } catch (ioException e) {return false; }} public static boolean del (string uuid) {node node = dom.selectsinglenode ("[@uuid = '"+uuid+"']"); if (node == null) {return false; } node.getParent (). hapus (node); Kembali Benar; } / *** tes* @param args* / public static void main (string [] args) {System.out.println (getDocument ()); }}Photomodel.java - objek nilai
Paket cn.hncu.domain;/*** Nilai enkapsulasi objek* @author chen haoxiang* 2016-7-24*/kelas publik photomodel {private string uuid; // uuid string private string realname = ""; // nama file private (nama file saat mengunggah) string private string ext; // "The suffix name of the dat; Mengunggah file Private String IP; // IP Private String Desc; // File Deskripsi File Public String getuuid () {return uuid; } public void setUuid (String uuid) {this.uuid = uuid; } 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 [uuid =" + uuid + ", realname =" + realname + ", ext =" + ext + ", dir =" + dir + ", datetime =" + datetime + ", ip =" + ip + ", desc =" + desc + "]"; }}Photodao.java:
Paket cn.hncu.photodao.dao; import java.util.list; import cn.hncu.domain.photomodel; antarmuka publik Photodao { / *** @param foto* @return menyimpan data* / public boolean simpan (foto photomodel); / *** @return mengembalikan semua informasi gambar*/ daftar publik <Totomodel> getAll (); / *** @param uuid* @return Temukan objek nilai yang dienkapsulasi melalui uuid*/ photomodel publik getslebyuuid (string uuid); / ** * @param uuid * @return Hapus informasi gambar di foto.xml melalui uuid */ public boolean deletexml (string uuid); / ** * @param dir * @return Hapus informasi gambar di disk server melalui path */ public boolean deleteFile (string pathfileName);}PhotoserImpl.java:
Paket cn.hncu.photodao.impl; impor java.io.file; impor java.util.arraylist; impor java.util.iterator; Impor Impor. cn.hncu.photodao.dao.photodao; import cn.hncu.utils.dom4jfactory; kelas publik PhotoserImpl mengimplementasikan photodao {@override public boolean save (foto photomodel) {document dom = dom4jfactory.getDocument (); Elemen root = dom.getrooteLement (); // tambahkan elemen atribut p = root.addelement ("foto"); 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 ()); return dom4jfactory.save (); } @Override Daftar publik <Totomodel> getAll () {List <TotomoDel> Daftar = ArrayList baru <TotomoDel> (); Dokumen dom = dom4jfactory.getDocument (); Elemen root = dom.getrooteLement (); Iterator <semem Sedikit> itu = root.elementiterator ("foto"); // Dapatkan iterator elemen foto melalui DOM4J, dan Anda juga dapat menemukan semua foto melalui XPath // Daftar <Node> Daftar = DOM.SelectNodes ("// Foto [@uuid]"); // iterator <node> it = lists.iterator (); while (it.hasnext ()) {element e = it.next (); Foto photomodel = photomodel baru (); 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 (foto); } daftar pengembalian; } @Override public photomodel getsinglebyuuid (string uuid) {list <othotomodel> foto = getAll (); untuk (foto photomodel: foto) {if (photo.getuuid (). equals (uuid)) {return photo; }} return null; } @Override public boolean deletexml (string uuid) {document dom = dom4jfactory.getDocument (); Elemen e = (elemen) dom.selectsinglenode ("// foto [@uuid = '"+uuid.trim ()+"']"); return e.getparent (). Remove (e); } @Override public boolean deleteFile (string pathfileName) {coba {file file = file baru (pathfileName); if (file.exists ()) {file.delete (); } return true; } catch (Exception e) {return false; }}}Photodaofactory.java:
package cn.hncu.photoDao.factory;import cn.hncu.photoDao.impl.PhotoSerImpl;/** * Factory method* @author Chen Haoxiang* 2016-7-24 */public class PhotoDaoFactory { public static PhotoSerImpl getPhotoDao(){ return new PhotoSerImpl(); }}UnggahanServlet.java:
paket cn.hncu.servlets; import java.io.file; impor java.io.ioException; import java.io.printwriter; import java.util.list; import javax.servlet.servletException; impor javax.servlet.http.httpserv; 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; impor org.apache.commons.fileupload.servlet.servletfileUpload; impor cn.hncu.domain.photomodel; impor cn.hncu.photoda.dao.photodel; cn.hncu.photoDao.factory.PhotoDaoFactory;import cn.hncu.utils.Dom4jFactory;import cn.hncu.utils.MyUtils;public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IoException {response.setContentType ("Teks/html; charset = utf-8"); response.getWriter (). print ("<h1> Maaf, halaman ini tidak mendukung Get Access !!! </h1>"); response.getWriter (). print ("<a href = 'javascript: history.go (-1)'> kembali ke halaman sebelumnya </a>"); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); final printwriter out = response.getWriter (); // Pengajuan Formulir Anti-Black-Non-Multipart // Gunakan alat unggahan boolean boo = servletfileupload.ismultipartcontent (permintaan); if (! boo) {out.print ("<h1> tidak mendukung metode pengiriman formulir biasa! </h1>"); kembali; } File file = file baru ("d:/photocache"); if (! file.exists ()) {file.mkdir (); } DiskfileItemFactory fifactory = DiskFileItemFactory baru (1024*10, file); SERVLETFILEUPLOAD UEDLOAD = SERVLETFILEUPLOAD baru (FIFACTORY); unggah.setHeadEncoding ("UTF-8"); // Setel nama file encoding string path = getSerVletContext (). getRealPath ("/foto"); FileItem fi = null; coba {list <fileitem> list = unggah.parseRequest (permintaan); Foto Photomodel = Photomodel baru (); // Enkapsulasi Data --- 7 Properti diperlukan photo.setrealname (""); int cont = 0; untuk (FileItem f: list) {if (cont! = 0 && cont%2 == 0 &&! photo.getRealName (). Equals ("")) {photo = new Photomodel (); // Re-Data Encapsulation} fi = f; if (fi.isformField ()) {// komponen bentuk normal // Dapatkan file deskripsi string desc = fi.getString ("UTF-8"); photo.setdesc (desc); //#1} else {// anti-Black 3-jika file tidak dipilih dalam komponen file if (fi.getsize () == 0) {photo.setrealname (""); cont ++; melanjutkan; } String fileName = fi.getName (); FileName = FileName.substring (fileName.LastIndexof ("//")+1); // Nama File Nyata Foto.setrealName (fileName); //#2 String ext = filename.substring (fileName.LastIndexOf (".")); // photo extension (ext); photo.setDateTime (myutils.getCurrentDateTime ()); //#4 photo.setip (request.getRemoteAddr ()); //#5 string uuid = myutils.getuuid (); photo.setuuid (uuid); //#6 photo.setdir (myutils.getdir (uuid)); //#7 // mengganggu file direktori dfile = file baru (path+photo.getdir ()); if (! dfile.exists ()) {dfile.mkdir (); } fi.write (file baru (path+photo.getDir ()+"/"+photo.getuuid ()+photo.getext ())); } cont ++; if (cont%2 == 0 &&! photo.getRealName (). Equals ("")) {photodao dao = photodaofactory.getphotodao (); boo = dao.save (foto); // Simpan ke Disk - Metode 2: Fileutils.copyInputStreamToFile (dalam, file baru (fileName2)); // ※ 2 ※ Menyimpan file gambar ke server hard disk foto = photomodel baru (); // ecapsulation}}} catch (fileuploadexception e) {e.printstack}}} catch () (file) () {e.printstack}}} catch () (file) {e. e.printstack}} (); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {if (fi! = null) {fi.delete (); } if (dom4jfactory.save ()) {out.print ("<h1> diunggah dengan sukses! </h1>"); out.print ("<a href = 'javascript: history.go (-1)'> kembali ke halaman sebelumnya </a>"); } else {out.print ("<h1> unggah gagal! </h1>"); out.print ("<a href = 'javascript: history.go (-1)'> kembali ke halaman sebelumnya </a>"); }}}}Tampilkan semua file -cloudphotoserver.java
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; impor cn.hncu.domain.photomodel; impor cn.hncu.photodao.dao.photodao; cloudphotcors publicpllet {photodaoid voBtends; photodao; DoGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string pwd = (string) request.getParameter ("pwd"); if ("chx" .equals (pwd)) {dopost (request, response); } else {response.setContentType ("Teks/html; charset = utf-8"); response.getWriter (). print ("<h1> Maaf, Anda tidak memiliki izin untuk mengakses !!! </h1>"); }} public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = 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> cloud album </iteme> </head>"); out.println ("<body>"); out.println ("<tabel border = '1px; double;#ff0000'>"); out.println ("<tr>"); out.println ("<tr>"); out.println ("<td> nama file </td>"); out.println ("<td> unggah waktu"); out.println ("<td> file </td>"); out.println ("<td> deskripsi file </td>"); out.println ("<td> operasi </td>"); out.println ("</tr>"); String tdwh = "style = 'width: 200px; tinggi: 200px;'"; // tunjukkan semua gambar photodao dao = photodaofactory.getphotodao (); Daftar <Totomodel> foto = dao.getall (); untuk (foto photomodel: foto) {string fileName = photo.getRealName (); String time = photo.getDateTime (); // output gambar string path = request.getContextPath () + "/foto/" + photo.getDir () + "/" + photo.getuuid () + photo.getext (); // System.out.println (Path); // /myphoto/photos//7/c/a1237a48a6aa451cb22fa78b15bafcea.jpg string img = "<a href = '" + path + "'> <img src = '" + path + "'/</a>"; String desc = photo.getDesc (); String delstr = "<a href = '/myphoto/servlet/delservlet? Uuid =" + photo.getuuid () + "'> hapus </a>"; String downstr = "<a href = '/myphoto/servlet/downservlet? Uuid =" + photo.getuuid () + "> Unduh </a>"; out.println ("<td" + tdwh + ">" + fileName + "</td>"); out.println ("<td" + tdwh + ">" + waktu + "</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 (); }}Hapus file - delservlet.java
Paket cn.hncu.servlets; impor java.io.ioException; impor java.io.printwriter; impor javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservlet; javax.servlet.http.httpservletResponse; impor cn.hncu.domain.photomodel; impor cn.hncu.photodao.dao.photodao; Kelas publik delservycerve. = Photodaofactory.getphotodao (); public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string uuid = request.getParameter ("uuid"); String ip = request.getRemoteAddr (); response.setContentType ("Teks/html; charset = utf-8"); Printwriter out = response.getWriter (); Photomodel photo = dao.getsinglebyuuid (uuid); if (photo! = null) {if (! photo.getip (). Equals (ip)) {out.print ("<h1> Anda tidak memiliki izin untuk menghapus file ini !!! </h1>"); out.print ("<a href = 'javascript: history.go (-1)'> kembali ke halaman sebelumnya </a>"); kembali ; } // 1. Hapus informasi dalam basis data boolean boo = dao.deletexml (uuid); if (boo) {string fileName = "foto/"+photo.getDir ()+"/"+photo.getuuid ()+photo.getext (); String pathfileName = getSerVletContext (). GetRealPath (fileName); if (dao.deleteFile (pathfileName)) {// Redirect ke album halaman response.sendredirect ("/myphoto/cloudphoto? pwd = chx"); } else {out.print ("<h1> tidak dapat dihapus dari server, file sedang ditempati !!! </h1>"); out.print ("<a href = 'javascript: history.go (-1)'> kembali ke halaman sebelumnya </a>"); }} else {out.print ("<h1> File tidak ada lagi !!! </h1>"); out.print ("<a href = 'javascript: history.go (-1)'> kembali ke halaman sebelumnya </a>"); }}}}Unduh File -DownServlet.java
Paket cn.hncu.servlets; import java.io.fileInputStream; import java.io.ioException; import java.io.inputstream; java.io.outputStream; impor java.net.urlencoder; impor javax.servlet.servletException; javax.servlet.http.httpservletrequest; impor javax.servlet.http.httpservletresponse; impor public. Downservlet memperluas httpservlet {private photodao dao = photodaofactory.getphotodao (); public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string uuid = request.getParameter ("uuid"); System.out.println (UUID); Photomodel photo = dao.getsinglebyuuid (uuid); System.out.println (foto); if (photo! = null) {// Setel header respons-penerima konten-ketika browser melihat header respons ini, itu akan membuka program unduhan yang menurutnya // (jika guntur diakui, guntur akan terbuka, jika tidak, file "simpan sebagai" "Dialog akan dibuka) response.setContentType (" Application/Force-Force sebagai "akan dibuka) response.setContentType (" Application/Force-force sebagai "akan dibuka) response.setContentType (" Application/Force-force sebagai "akan dibuka) response.setContentType (" Application/Force-Download); String realname = photo.getRealName (); String agent = request.getHeader ("User-agent"); System.out.println (agen); if (agent.indexof ("mozilla")! =-1) {// firefox browser response.setheader ("konten-disposisi", "lampiran; fileName ="+ string baru (realname.getbytes ("GB2312"), "ISO-8859-1")); } else {// Selesaikan masalah bahasa Cina yang kacau (cukup gunakan kalimat berikut untuk menyandikan nama file) realname = urlencoder.encode (realname, "UTF-8"); // Gunakan mekanisme pengkodean yang ditentukan untuk mengubah string menjadi aplikasi/x-www-format yang ditabuhkan. response.setHeader ("Disposisi Konten", "lampiran; fileName =/" "+RealName+"/""); // Catatan: "Cttachment;" Tidak dapat hilang, jika tidak, browser akan terbuka langsung di jendela baru} string fileName = "Foto/"+photo.getDir ()+"/"+photo.getuuid ()+photo.getext (); String pathfileName = getSerVletContext (). GetRealPath (fileName); InputStream in = new fileInputStream (pathfileName); OutputStream out = response.getoutputStream (); byte buf [] = byte baru [2048]; int len = 0; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.close (); melampirkan(); } else {response.setContentType ("Teks/html; charset = utf-8"); response.getWriter (). println ("<h1> File ini telah dihapus </h1>"); }}}Hasil demonstrasi
Saya tidak akan menunjukkan ini, ada gambar di depannya, dan saya telah memberikan semua kode sumber. Jika Anda tertarik, Anda dapat melakukan beberapa perbaikan sendiri.
Faktanya, ini juga dapat mengunggah jenis file lain, karena kami tidak memiliki nama akhiran pelindung, dan kami menggunakan streaming karakter untuk mengirimkannya, dan itu tidak akan terdistorsi (dapat diproses sebagai disk cloud ~~)! Lai
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.