日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

相册管理系统

發布時間:2024/3/24 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 相册管理系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

功能文件的上傳,下載和管理
技術:1.用xml當做數據庫存儲信息(dom4j,xpath)
2.Java表單的文件上傳和下載
3.文件目錄的打散 ( Hash目錄是一種優化文件存儲性能的方法)

需要的jar包:
commons-fileupload-1.2.2.jar、commons-io-2.1.jar、dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar


先寫index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>相冊管理系統</title></head><body><h1>我的小相冊</h1><a href="jsps/upload.jsp">上傳相冊</a><a href="servlets/ShowServlet">瀏覽相冊</a></body> </html>

upload.jsp是下載頁面放在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>相處上傳</h1><form action="<%=request.getContextPath()%>/servlets/UploadServlet"method="post" enctype="multipart/form-data">文件:<input type="file" name="file1"/><br/>說明:<input type="text" name="desc" /><br/><input type="submit" value="上傳" /></form></body></html>

photos.xml放在src目錄下

<?xml version="1.0" encoding="UTF-8"?> <photos> </photos>

在寫值對象PhotoModel

package cn.hncu.demain;public class PhotoModel {private String id;private String realName;private String ext;private String dir;private String dateTime;private String ip;private String desc;public String 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;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return "PhotoModel [id=" + id + ", realName=" + realName + ", ext="+ ext + ", dir=" + dir + ", dateTime=" + dateTime + ", ip="+ ip + ", desc=" + desc + "]";}}

寫工具類兩個:
MyUtil(日期格式化,目錄打散代碼,隨機id代碼)

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("yyyy年MM月dd日 hh:mm:ss");public static String 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);return dir1+"/"+dir2;} }

Dom4jFactory(dom4j的相關操作,獲取document對象,保存操作)

package cn.hncu.utils;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.UnsupportedEncodingException;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;public class Dom4jFactory {private static Document dom = null;private static String path;static {try {SAXReader sax = new SAXReader();// 學習一下服務器下的資源路徑加載方式(因為我們的資源已經從MyEclipse中發布到Tomcat服務器中了,所以跟原來純Java項目不一樣了)// 利用當前類找到它的類加載器,然后通過該類加載器再去獲得資源路徑path = Dom4jFactory.class.getClassLoader().getResource("photos.xml").getPath();dom = sax.read(new FileInputStream(path));} catch (Exception e) {throw new RuntimeException(e.getMessage(), e);}}public static Document getDom(){return dom;}public static boolean save(){try {OutputFormat format=new OutputFormat();format.setEncoding("utf-8");XMLWriter w = new XMLWriter( new FileOutputStream(new File(path)),format);w.write(dom);w.close();return true;} catch (Exception e) {return false;}} }

從底層寫PhotoDao

package cn.hncu.dao;import java.util.ArrayList; import java.util.Iterator; import java.util.List;import org.dom4j.Document; import org.dom4j.Element;import cn.hncu.demain.PhotoModel; import cn.hncu.utils.Dom4jFactory;public class PhotoDao {//添加public boolean add(PhotoModel photo){Document dom=Dom4jFactory.getDom();Element root=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();return boo;}//瀏覽public List<PhotoModel> getAll(){Document dom=Dom4jFactory.getDom();List<PhotoModel> list=new ArrayList<PhotoModel>();Element root=dom.getRootElement();Iterator<Element> it=root.elementIterator();while(it.hasNext()){PhotoModel photo=new PhotoModel();Element 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);}return list;}public PhotoModel getSingleById(String id) {Document dom=Dom4jFactory.getDom();List<PhotoModel> list=getAll();for(PhotoModel photo:list){if(photo.getId().equals(id)){return photo;}}return null;}public boolean del(String id) {Document dom=Dom4jFactory.getDom();Element e=(Element) dom.selectSingleNode("//photo[@id='"+id.trim()+"']");return e.getParent().remove(e);} }

最后寫四個servlet
UploadServlet 上傳Servlet代碼

package cn.hncu.servlets;import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils;import cn.hncu.dao.PhotoDao; import cn.hncu.demain.PhotoModel; import cn.hncu.utils.MyUtils;public class UploadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=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>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.println("不支持get方式上傳!");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();String path=request.getServletContext().getRealPath("/photos");DiskFileItemFactory factory=new DiskFileItemFactory();factory.setRepository(new File("g:/a"));ServletFileUpload upload = new ServletFileUpload(factory);upload.setSizeMax(1024*1024*10);//最大10Mupload.setHeaderEncoding("utf-8");//用于設置文件名的編碼,相當于:request.setCharacterEncoding("utf-8");FileItem fi=null;try {List<FileItem> list=upload.parseRequest(request);PhotoModel photo = new PhotoModel();//數據封裝---需要7個屬性boolean boo=false;InputStream in = null;for(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("沒有選擇文件!");return;}if(realName.indexOf("\\")!=-1){realName=realName.substring(realName.lastIndexOf("\\")+1);}photo.setRealName(realName);//真實文件名String ext=realName.substring(realName.lastIndexOf("."));photo.setExt(ext);//3photo.setDateTime(MyUtils.getCurrentDateTime());//4photo.setId(MyUtils.getUUid());//5photo.setDir(MyUtils.getDir(photo.getId()));//6photo.setIp(request.getRemoteAddr());//7}}//把相片信息存儲到數據庫PhotoDao dao=new PhotoDao();boo=dao.add(photo);//如果上面的相片信息保存成功,那么才開始接收圖片文件,把它保存到服務器硬盤if(boo){System.out.println(dao);path=path+"/"+photo.getDir();File dir=new File(path);if(!dir.exists()){dir.mkdirs();}String fileName=path+"/"+photo.getId()+photo.getExt();FileUtils.copyInputStreamToFile(in, new File(fileName));String strPath = request.getContextPath()+"/servlets/ShowServlet";out.print("上傳成功!<a href='"+strPath+"'>瀏覽相冊</a>");}else{out.print("上傳失敗!");}} catch (FileUploadException e) {throw new RuntimeException("上傳失敗!", e);}finally{if(fi!=null){fi.delete();}}out.flush();out.close();}}

ShowServlet 瀏覽相冊的Servlet端

package cn.hncu.servlets;import java.io.IOException; import java.io.PrintWriter; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDao; import cn.hncu.demain.PhotoModel;public class ShowServlet extends HttpServlet {IOException if an error occurredpublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.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>A Servlet</TITLE></HEAD>");out.println(" <BODY>");String table="<table border='1' width='100%'>"+"<tr><th>文件名</th><th>上傳ip</th><th>上傳時間</th><th>圖片</th><th>說明</th><th>操作</th></tr>";out.print(table);PhotoDao dao=new PhotoDao();List<PhotoModel> list=dao.getAll();for(PhotoModel p:list){out.print("<tr>");out.println("<td>"+p.getRealName()+"</td>");out.println("<td>"+p.getIp()+"</td>");out.println("<td>"+p.getDateTime()+"</td>");//輸出圖片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()+"'>刪除</a>&nbsp;";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; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URLEncoder;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDao; import cn.hncu.demain.PhotoModel;public class DownServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String id=request.getParameter("id");response.setContentType("application/force-download");PhotoModel p=new PhotoDao().getSingleById(id);if(p!=null){String realName=p.getRealName();realName=new String(realName.getBytes("iso8859-1"),"utf-8");response.setHeader("content-Disposition", "attachment;filename=\""+realName+"\"");String relpath=getServletContext().getRealPath("/photos/"+p.getDir()+"/"+p.getId()+p.getExt());InputStream in=new FileInputStream(relpath);OutputStream out=response.getOutputStream();System.out.println(relpath);byte buf[]=new byte[1024];int len=0;while ((len=in.read(buf))!=-1){out.write(buf,0,len);}out.close();}else{response.setContentType("text/html;charset=utf-8");response.getWriter().println("該文件已經被刪除!");}}}

Delservlet 刪除操作的服務器

package cn.hncu.servlets;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import cn.hncu.dao.PhotoDao; import cn.hncu.demain.PhotoModel;public class DelServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=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("你無權進行刪除!");return;}//※※※※以下部分課后補敲的!!!!//1刪除數據庫中的信息PhotoDao dao=new PhotoDao();boolean boo=dao.del(id);//2把服務器硬盤中的文件刪除if(boo){String fileName="photos/"+p.getDir()+"/"+p.getId()+p.getExt();String pathFileName = getServletContext().getRealPath(fileName);File f=new File(pathFileName);if(f.exists()){f.delete();}String strPath = request.getContextPath()+"/servlets/ShowServlet";out.println("相片刪除成功!<a href='"+strPath+"'>瀏覽相冊</a>");}else{out.println("相片刪除失敗!");}}else{response.setContentType("text/html;charset=utf-8");response.getWriter().println("該文件不存在!");}} }

總結

以上是生活随笔為你收集整理的相册管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。