jsp相册管理小项目

小项目(相册管理):

任何人都可以上传相片,文件名保存在数据库(xml文件)中,用户可以下载,且下载时的文件名与上传时一致即保持不变。图片文件在后台是用UUID打散存放的。用户(以IP识别)只能删除自己上传的照片。
总需求: 可以对图片进行上传、下载、浏览、删除,图片能附文字(说明与上传时间)。

功能展示:
主页:
这里写图片描述

上传页面:
这里写图片描述

相册:
这里写图片描述

设计:
1、数据库设计(数据结构设计)

<photos><photo id="uuid" realName="真名.jpg" dt="2017-07-11 18:51"ext="jpg" ip="192.168.31.168" dir="a/5"><desc>当前图片相关说明desc>photo><photo id="uuid22" realName="真名2.jpg" dt="2017-07-11 18:51"ext=".jpg" ip="192.168.31.168" dir="3/4"><desc>当前图片相关说明desc>photo>
photos>

JavaBean: PhotoModel(id,realName,dt,ext,ip,dir,desc) –7个成员变量

2、工具包(工具类)
dom4j, 文件上传工具包(apache),
DomFactory类
MyUtils类{getUUID(),getCurrentDT(),getDir(uuid) }

3、PhotoDao( DAO标准操作 )

4、主页index.jsp : 超链接–上传(jsps/up.jsp), 超链接–显示(ShowServlet)

5、上传( UploadServlet, jsps/up.jsp )

6、显示( ShowServlet )

7、删除( DelServlet, 用户界面在 ShowServlet生成的页面中加”删除”的超链接)

8、下载( DownServlet,用户界面在 ShowServlet生成的页面中加”下载”的超链接)

9、浏览( ShowServlet生成的页面中,给图片浏览功能的超链接 )

http://localhost:8080/photoWeb/servlet/DelServlet?id=a30ce7c5ad304bcbac6002bd33a620ad
http://localhost:8080/photoWeb/servlet/DownServlet?id=287308445a1442e29b3fe4717af28e90

http://192.168.31.168:8080/photoWeb/

核心代码:
上传servlet:

package cn.hncu.pic.servlet;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;import cn.hncu.pic.dao.photoDao;
import cn.hncu.pic.domFactory.DocumentDaoFactory;
import cn.hncu.pic.domain.photoModel;
import cn.hncu.pic.utils.MyUtils;public class picUploadServlet extends HttpServlet {Document dom = DocumentDaoFactory.getdom();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");response.getWriter().println("不支持GET方式上传文件");boolean boo = ServletFileUpload.isMultipartContent(request);if (boo) {response.getOutputStream().println("不支持普通表单上传");return;}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("utf-8");DiskFileItemFactory f = new DiskFileItemFactory(1024 * 8, new File("d:/a"));// 设置缓存大小和设置临时文件ServletFileUpload upload = new ServletFileUpload(f);// 文件上传的解析器。如果不给实参f,则临时目录为默认的:Tomcat/temp下upload.setFileSizeMax(1024 * 1024 * 20);// 设置每个文件最大5MFileItem ff = null;InputStream in = null;// 解析try {List list = upload.parseRequest(request);photoModel photo = new photoModel();for (FileItem ff0 : list) {ff = ff0;if (ff.isFormField()) {// 普通表单组件,本例为:参数desc// String desc = ff.getString();//以默认编码来获取String desc = ff.getString("UTF-8");// POST2方式下,普通表单组件的编码要在获取参数的方法中指定参数photo.setDesc(desc);} else {// input-file组件// 接收文件名String fileName = ff.getName();photo.setRealName(fileName);if (ff.getSize() == 0) {// 该input-file是空的out.println("没有选择照片!");return;}photo.setExt(fileName);String ext = fileName.substring(fileName.lastIndexOf("."));photo.setExt(ext);photo.setIp(request.getRemoteAddr());photo.setId(MyUtils.getUUid());photo.setDt(MyUtils.getCurrentDataTime());photo.setDir(MyUtils.getDir(photo.getId()));in = ff.getInputStream();}}photoDao dao = new photoDao();boolean boo = dao.save(photo);if (boo) {String path = getServletContext().getRealPath("/photos");path = path + "/" + photo.getDir();File file = new File(path);if (!file.exists()) {file.mkdirs();}String fn = path + "/" + photo.getId() + photo.getExt();FileUtils.copyInputStreamToFile(in, new File(fn));out.println("上传成功");}} catch (FileUploadException e) {throw new RuntimeException("上传失败");} finally {if (ff != null) {ff.delete();// 删除ff对象及临时文件}if (in != null) {in.close();}}}
}

显示servlet

package cn.hncu.pic.servlet;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.pic.dao.photoDao;
import cn.hncu.pic.domain.photoModel;public class ShowServlet extends HttpServlet {private photoDao dao = new photoDao();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();out.println("");out.println("");out.println("  A Servlet");out.println("  ");String str = ""+ "";out.println(str);List photos = dao.getAll();// 每一张照片输出一行for (photoModel photo : photos) {System.out.println(photo);out.println("");out.println("");out.println("");String path = request.getContextPath() + "/photos/"+ photo.getDir() + "/" + photo.getId() + photo.getExt();out.println("");out.println("");out.println("");out.println("");}out.println("  ");out.println("");out.flush();out.close();}}
package cn.hncu.pic.servlet;import java.io.File;
import java.io.IOException;
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.pic.dao.photoDao;
import cn.hncu.pic.domain.photoModel;public class DelServlet extends HttpServlet {photoDao dao = new photoDao();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");request.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();out.println("");out.println("");out.println("  A Servlet");out.println("  ");String id = request.getParameter("id");String ip = request.getRemoteAddr();photoModel photo = dao.getSingelByid(id);if (photo != null) {if (!photo.getIp().equals(ip)) {out.println("你没有权限删除该照片");} else {// 1.先删除数据库的信息boolean boo = dao.del(id);// 2.删除服务器硬盘中的资源文件if (boo) {String path = "/photos/" + photo.getDir() + "/"+ photo.getId() + photo.getExt();String pathAndFileName = getServletContext().getRealPath(path);File file = new File(pathAndFileName);if (file.exists()) {file.delete();}String strPath = request.getContextPath()+ "/ShowServlet";out.println("删除成功 + strPath + "'>浏览相册");} else {out.println("照片删除失败");}}} else {out.println("该照片已经不存在");}out.println("  ");out.println("");out.flush();out.close();}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

文件名上传时间图片说明操作
" + photo.getRealName() + "" + photo.getDt() + "" + photo.getDesc() + "+ photo.getId()+ "'>删除  + photo.getId() + "'>下载