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

相册管理

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

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

图片的上传 

图片的上传在之前的博客写的很清楚了。点击打开链接; 在这个相册管理中,就不是单一的文件传了,还需要涉及到很多参数供其他功能模块的使用
//上传文件一般采用外面的 apache的上传工具包/** 我们需要将上传的文件放到指定的文件夹下* 要获得文件的信息  文件名   要存储的文件夹(打散) uuid--dir* 解决中文问题存储的文件名     uuid.jpg* 每个人都有自己的权限      ip* 上传的时间                 dt* 文件原先的真是名字  relName* 相片的说明  			desc* 文件的扩展名          ext*上面上传一个图片需要这么多的信息,,所以 采用 值对象《VO》封装采用打乱文件夹存储,让性能更优。
		 */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);//允许存储容量为50Msf.setFileSizeMax(1024*1024*20);//单个文件最大容量为 20MString path=getServletContext().getRealPath("/upFile");//获得文件的所在磁盘的路径--》存储位置Photo p =new Photo();InputStream in=null;//拷贝流需要boolean boo=false;FileItem f0=null;//用来删除临时文件try {List list=sf.parseRequest(request);for(FileItem ff:list){
//前面的都是和之前的那个说的差不多,具体的统计参数就是从这里开始。

				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);//6String 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 IPboo =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();//删除临时文件}}
上传除了统计参数,我们需要将数据存储的xml文件中,还需要将图片存储起来。等浏览的时候统一查看。 效果图:


统一浏览

浏览基本就是全部将xml文件里面的数据,读出来,然后统一读出来显示。封装在一个list中,将所有的photo数据封装在list集合中
//查询所有的对象然后封装成一个list对象返回给前端public static List getAll(){List list=new ArrayList();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生成的idp.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("");out.println("");out.println("  A Servlet");out.println("  ");List 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 = "";out.write(str);for(Photo p:list){relName=p.getRelName();dt=p.getDt();imgs=path+"/upFile/"+p.getDir()+"/"+p.getId()+p.getExt();//完成的文件路径加文件名ss="";tt="";//通过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 deleteByid(String ip,String id) {Map map =new HashMap();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 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");//重定向到显示页面}
整个项目的下载链接 点击打开链接 本人处于学习中,刚学到这个知识点。这个技术可能很落后了,本人会好好学习新的技术,让自己的一直成长。若是需要这个简单的程序,可以直接找我。。


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

相关文章

相册名时间图片显示操作
"+relName+""+dt+""+"图片下载 删除图片"+"