javaWEB实现相册管理的简单功能_java

这仅仅只是一个小小的相册管理,主要实现的功能:能够实现对图片的上传,统一浏览,单个下载,单个删除,只能删除自己上传的文件。
现在对每个功能进行单个的解释:
图片的上传 
图片的上传在之前的文章中写的很清楚了,点击打开链接:《JavaEE实现前后台交互的文件上传与下载》 。
在这个相册管理中,就不是单一的文件传了,还需要涉及到很多参数供其他功能模块的使用

<span style="font-size:24px;">//上传文件一般采用外面的 apache的上传工具包
 /*
 * 我们需要将上传的文件放到指定的文件夹下
 * 要获得文件的信息 文件名 要存储的文件夹(打散) uuid--dir
 * 解决中文问题存储的文件名 uuid.jpg
 * 每个人都有自己的权限 ip
 * 上传的时间  dt
 * 文件原先的真是名字 relName
 * 相片的说明 desc
 * 文件的扩展名 ext
 *上面上传一个图片需要这么多的信息,,所以 采用 值对象《VO》封装采用打乱文件夹存储,让性能更优。</span>
<span style="font-size:24px;"> */
 request.setCharacterEncoding("utf-8");
 response.setContentType("text/html;charset=utf-8");
 PrintWriter out=response.getWriter(); 

 //读文件用到apache的两个包
 //临时存储目录
 File f =new File("f:/ex/temp");//存放临时文件的目录
 DiskFileItemFactory dff=new DiskFileItemFactory(1024*1024*20, f);//允许临时存储文件大小为20M 

 //解析的文件的工具
 ServletFileUpload sf =new ServletFileUpload(dff);
 sf.setSizeMax(1024*1024*50);//允许存储容量为50M
 sf.setFileSizeMax(1024*1024*20);//单个文件最大容量为 20M 

 String path=getServletContext().getRealPath("/upFile");//获得文件的所在磁盘的路径--》存储位置
 Photo p =new Photo();
 InputStream in=null;//拷贝流需要
 boolean boo=false;
 FileItem f0=null;//用来删除临时文件
 try {
 List<FileItem> list=sf.parseRequest(request);
 for(FileItem ff:list){</span> 
<span style="font-size:24px;">//前面的都是和之前的那个说的差不多,具体的统计参数就是从这里开始。</span> 
<span style="font-size:24px;"> f0=ff;
 if(ff.isFormField()){//这个为描述的内容
  String name=ff.getString("utf-8");//采用utf-8的编码方式去读
  p.setDesc(name);//1 文件的描述
 }else{
  String name=ff.getName();//获得文件本框里面的内容--->整个图片的目录
  //System.out.println("name:"+name);
  String id=UtilsFactory.getUUid();
  p.setId(id);//6
  String dirs=UtilsFactory.getDir(id);//获得文件夹目录----使用uuid一一打散了的
  p.setDir(dirs);//2 打乱之后的目录
  p.setDt(UtilsFactory.getDate());//3 时间
  String relname=name.substring(name.lastIndexOf("/")+1);
  p.setRelName(relname);//4 文件的真实名字
  String ext=name.substring(name.lastIndexOf("."));
  p.setExt(ext);//5 文件扩展名
  p.setIp(request.getRemoteAddr());//7 IP
  boo =MyDao.Add(p);//保存到xml文件中
  if(boo){//保存成功
  path=path+"/"+p.getDir();
  File f1 =new File(path);//判断文件的存储路径是否存在,不存在就创建
  if(!f1.exists()){
  f1.mkdirs();
  }
  in=ff.getInputStream();
  FileUtils.copyInputStreamToFile(in,new File(path+"/"+p.getId()+p.getExt()) );
  }
 }
 }
 } catch (FileUploadException e) {
 boo=false;
 }finally{
 if(f0!=null){
 f0.delete();//删除临时文件
 }
 }</span> 

上传除了统计参数,我们需要将数据存储的xml文件中,还需要将图片存储起来。等浏览的时候统一查看。
效果图:

统一浏览
浏览基本就是全部将xml文件里面的数据,读出来,然后统一读出来显示。封装在一个list中,将所有的photo数据封装在list集合中

//查询所有的对象然后封装成一个list对象返回给前端
 public static List<Photo> getAll(){ 

 List<Photo> list=new ArrayList<Photo>();
 Document dom =DocumentFactory.getDocument();
 Element root=dom.getRootElement();
 Iterator it=root.elementIterator();//这是根节点遍历器
 while(it.hasNext()){
 Element e=(Element) it.next();//找到节点
 Photo p =new Photo();//每一的photo地址不一样,所以必须每次新开空间
 p.setDesc(e.attributeValue("desc"));//文件描述符
 p.setDir(e.attributeValue("dir"));//文件目录
 p.setDt(e.attributeValue("dt"));//时间
 p.setExt(e.attributeValue("ext"));//文件扩展名
 p.setId(e.attributeValue("id"));//uuid生成的id
 p.setIp(e.attributeValue("ip"));
 p.setRelName(e.attributeValue("relname"));
 list.add(p);
 }
 return list;
 }

具体代码:

//浏览相册需要把所有的文件读出来。需要一一去读,所以需要去读所有的xml文件
 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>");
 List<Photo> list=MyDao.getAll();//获得所有xml文件里面的内容,数据全部封装到list中
 String path=getServletContext().getContextPath();//进入web之后要采用相对路径才能访问的到
 String ss=null;
 String imgs=null;
 String dt=null;
 String relName;
 String tt=null;
 String str = "<table border=1px width='80%'><tr><th>相册名</th><th>时间</th><th>图片显示</th><th>操作</th>";
 out.write(str);
 for(Photo p:list){
 relName=p.getRelName();
 dt=p.getDt();
 imgs=path+"/upFile/"+p.getDir()+"/"+p.getId()+p.getExt();//完成的文件路径加文件名 

 ss="<tr><td>"+relName+"</td><td>"+dt+"</td><td>"+"<a href='"+imgs+"'><img style='border:0px' width='100' height='100' src='"+imgs+"' alt='图片'/></a></td>";
 tt="<td><a href='DownFile?id="+p.getId()+"'>下载</a> <a href='MyDelelte?id="+p.getId()+"'>删除图片</a>"+"</td></tr>";//通过id来区分他们直接的区别 可以进行删除和下载
 out.write(ss);
 out.write(tt);
 }

效果:

单个下载
下载在之前的上传和下载中都说的很清楚了,点击打开链接: 《JavaEE实现前后台交互的文件上传与下载》。

下载的代码中需要注意:需要设置相应头和文件名的传输

对于下载文件需要主要 首先需要让浏览器知道 设置头
* response.setContentType("application/force-download");//设置相应头,告诉浏览器这是下载文件
* 第二就是设置文件名了
* response.setHeader("Content-Disposition","attachment;filename='"+relName+"'");//下载是那边显示的是原来文件名

下面是具体的代码:

response.setContentType("application/force-download");//设置相应头,告诉浏览器这是下载文件
 request.setCharacterEncoding("utf-8"); 

 String id=request.getParameter("id");
 Photo p=MyDao.getSingalByid(id);//通过id获得要下载的对象
 //写入真实名字
 if(p!=null){
 String relName1=p.getRelName();
 String relName=URLEncoder.encode(relName1, "utf-8");
 response.setHeader("Content-Disposition","attachment;filename='"+relName+"'");//下载是那边显示的是原来文件名
 OutputStream out =response.getOutputStream();//写文件时候需要
 //路径
 String path="/upFile/"+p.getDir()+"/"+p.getId()+p.getExt();
 String path1 =getServletContext().getRealPath(path); 

 System.out.println(path1);//检测 

 InputStream in=new FileInputStream(path1); 

 byte[] b=new byte[1024];
 int len =0;
 while((len=in.read(b))!=-1){
 out.write(b, 0, len);
 } 

 }else{
 response.setContentType("utf-8");
 PrintWriter pw =response.getWriter();
 pw.write("文件不存在无法下载");
 }
 }

效果图:

删除文件
删除文件需要用到的技术相对其他功能
要匹配IP,ID这样才能让删除的时候用权限

//删除照片
public static Map<String , Object> deleteByid(String ip,String id) {
 Map<String, Object> map =new HashMap<String, Object>();
 Document dom =DocumentFactory.getDocument();
 Element ele=(Element) dom.selectSingleNode("//photo[@id='"+id.trim()+"']");//xpath的使用
 if(ele==null){
 map.put("success", false);
 map.put("msg", "已经删除");
 return map;
 }else{
 String tempip=ele.attributeValue("ip");
 if(!tempip.equals(ip)){
 map.put("success", false);
 map.put("msg", "你不能删除别人的照片");
 return map;
 }else{
 map.put("success", true);
 //访问成功后,把数据分装成一个值对象,返回给逻辑层 我们这样直接删除,只是xml文件里面的节点删除,但是已经存储的文件是没有删除的
 Photo p =new Photo();
 p.setId(id);
 p.setExt(ele.attributeValue("ext"));
 p.setDir(ele.attributeValue("dir"));
 map.put("photo", p); 

 //真正的数据删除
 ele.getParent().remove(ele);
 DocumentFactory.Save();
 return map;
 }
 }
 request.setCharacterEncoding("utf-8");
 response.setContentType("text/html;charset=utf-8");
 PrintWriter out=response.getWriter();
 String id =request.getParameter("id");//从客户端传过来的消息
 String ip =request.getRemoteAddr();
 Map<String, Object> map =MyDao.deleteByid(ip,id);
 if(map.get("success").equals(false)){//这都是删除不成功的
 out.print("消息为:"+map.get("success"));
 }else{
 Photo p =(Photo) map.get("photo");//根据photo里面的文件名和路径删除文件
 String path=getServletContext().getRealPath("upFile");
 String filename=path+"/"+p.getDir()+"/"+p.getId()+p.getExt();//文件的路径包括文件名
 System.out.println(filename);
 File f=new File(filename);
 if(f.exists()){
 System.out.println(f.getName());
 f.delete();//删除文件
 }
 }
 response.sendRedirect("LookPhoto");//重定向到显示页面
}

整个项目的下载链接: 《javaWEB实现相册管理的简单功能》

正在处于学习中,刚学到这个知识点,技术可能很落后了,但也愿意分享给大家,大家共同进步。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javaweb
相册管理
java实现电子相册、java简单电子相册、webserver的简单实现、javaweb相册管理系统、javaweb网络相册源码,以便于您获取更多的相关知识。

时间: 2024-10-30 03:13:27

javaWEB实现相册管理的简单功能_java的相关文章

JavaWeb Session 会话管理实例详解_java

Session会话简介 会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程. 会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息. 当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况).再次打开新的浏览器,将开始一个新的会话. 类javax.servlet.http.HttpSession.每一个HttpSession代表用户的一个会话. 每一个Session的过期时间默认为30分钟. 当浏览器第一次访

可以推荐一个实验用IC读写器吗,学生用,不用太贵,可实现想要的简单功能

问题描述 可以推荐一个实验用IC读写器吗,学生用,不用太贵,可实现想要的简单功能 想给读写器加上一点自己想要的功能,譬如说刷卡时加上语音提示,不知道选用那个读写器,可以推荐一个吗,谢谢 解决方案 可以联系我,聊聊..

mdi-请教实现这样的一个简单功能的 MFC MDI 框架该怎么构建

问题描述 请教实现这样的一个简单功能的 MFC MDI 框架该怎么构建 本人之前有写过一个简单的 MFC SDI 的框架,也就是每次打开一幅图像,然后处理完这一幅图像再读进来下一幅重复处理操作,这样的功能 SDI 也就够了.最近想升级下程序框架,就试着在写一个 MDI 的框架,想实现的大致效果就是: 1.主窗口分成 3 块区域,最左边的区域存放选择的所有图像的缩略图(或者说图标icon),双击其中某幅图像的话,该图像就会在其右的最大的区域以全图形式显示出来,双击了多幅图像的话,这些被双击的图像都

最精简的相册管理代码

Micrsoft为我们提供了最精简的相册管理代码: using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing

巧用photoshop中简单功能表现大效果

  巧用photoshop中简单功能表现大效果,分形效果,运用于专题.海报.背景打造过程用适用,效果也很赞,关键简单粗暴,几步就可以搞定 分类: PS图片处理

javaweb和C#实现在线支付功能

问题描述 javaweb和C#实现在线支付功能 如何使用java项目调用c#项目实现支付功能,jsp页面中生成订单信息然后调用C#项目,去调用支付宝页面实现支付功能,然后C#项目返回支付结果给jsp 解决方案 不是一个项目,用response.redirect跳转,或者前端用框架网页 解决方案二: javaweb实现记住密码功能

java源码-java写一个斗地主的最简单功能

问题描述 java写一个斗地主的最简单功能 斗地主定义一副扑克牌,按照斗地主的规则,为三家随机发17张牌,并且留3张底牌.同时指定一个地主.很好玩的,求源码就这一个简单功能就行了 解决方案 http://www.cnblogs.com/jiahuafu/p/4936111.html 解决方案二: 容器放牌,每次随机抽出不重复的牌存到三个小容器,最后剩三张,在用随机数指定地主

ASP.NET MVC4使用MongoDB制作相册管理_实用技巧

ASP.NET MVC4使用MongoDB制作相册管理实例分享 TIPS:1.Image转成Base64保存到mongodb字段          2.数据模型是嵌套的关联  首先定义Model层:  public class Photo : IEquatable<Photo> { [Required] public string PhotoName { get; set; } [Required] public string PhotoDescription { get; set; } pu

多备份:为企业带来了更为高效的管理和简单的操作体验

摘要: 多备份是专注于业务数据云端备份.恢复.迁移.存储和归档的云平台(SaaS)应用提供商,备份的数据类型包括结构化数据(比如MySQL/Oracle/MS SQL Server)和非结构化数据(包括文档.目 多备份是专注于业务数据云端备份.恢复.迁移.存储和归档的云平台(SaaS)应用提供商,备份的数据类型包括结构化数据(比如MySQL/Oracle/MS SQL Server)和非结构化数据(包括文档.目录.多媒体以及各类应用程序等等).和传统的数据备份巨头相比,基于云平台的服务不仅成本低