javaWEB之-----------简单的相册管理

原创 2015年11月20日 16:02:10

相册管理

这仅仅只是一个小小的相册管理,主要实现的功能:能够实现对图片的上传统一浏览单个下载单个删除只能删除自己上传的文件。

现在对每个功能进行单个的解释:

图片的上传 

图片的上传在之前的博客写的很清楚了。点击打开链接
在这个相册管理中,就不是单一的文件传了,还需要涉及到很多参数供其他功能模块的使用
<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);
		}
效果:


单个下载

下载在之前的上传和下载中都说的很清楚了。点击打开链接
下载的代码中需要注意:需要设置相应头和文件名的传输
 对于下载文件需要主要  首先需要让浏览器知道  设置头
 * 		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");//重定向到显示页面
	}
整个项目的下载链接点击打开链接
本人处于学习中,刚学到这个知识点。这个技术可能很落后了,本人会好好学习新的技术,让自己的一直成长。若是需要这个简单的程序,可以直接找我。。


版权声明:本文为博主原创文章。希望大家多指教指教,大家共同学习。。

相关文章推荐

Java Web实践专题——图片管理

在一个网站中可能会存在大量的图片,有些图片对于所有的网页是相同的,例如网页的LOGO,主页中的图片,这些图片就像普通的html文件一样,这些图片的处理通常使用网页编辑工具来完成的,也就是说通常是由美工...

JavaEE中文件的下载和文件的上传(--------前后台交互----------)

文件上传技术与下载技术 介绍: service方法中的两个重要参数。 ServletRequest – 用接收用户的请求。它的作用是: 可获取请求头信息。 可设置请请求的字符编码。 可获得用户传递的参...

WEB 在线相册小系统

上次翻出来几个小系统,虽然很简单,但是还是有参考价值的! 今天我没事,又整理了一个用JSP+Servlet写的在线相册,很简单,但是对于刚入门的人来说应该还是有点参考和学习意义的吧! 其实这些系统...

javaWEB中前后台中文乱码问题解决方法

中文问题一直是很多人难以解决的问题。特别是从前台传到后台之后,都不知道问题出在哪里了。现在给出几种解决的方法。 方法一: tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的。所以...

Java中生成的UUID(全局唯一标识符-----(唯一)-------)

在写程序中,我们涉及id的问题时候,时常会担心重复的问题,这个就可以解决id重复问题

MyEclipse+Tomcat配置详解

一、Tomcat1 Tomcat概述Tomcat服务器由Apache提供,开源免费。由于Sun和其他公司参与到了Tomcat的开发中,所以最新的JSP/Servlet规范总是能在Tomcat中体现出来...

MyEclipse黑色主题及MyEclipse 2016stable1.0破解教程

一.先看下效果图 已激活 酷黑主题: MyEclipse分为标准版(Standard)、专业版(Professional)、Blue、for Spring、Bling等众多版本 sta...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)