java web相册_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);//允许存储容量为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 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);//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();//删除临时文件
}
}
上传除了统计参数,我们需要将数据存储的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生成的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(""-//W3C//DTD HTML 4.01 Transitional//EN\">");
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="
"+relName+""+dt+""+"";
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");//重定向到显示页面
}整个项目的下载链接
点击打开链接
本人处于学习中,刚学到这个知识点。这个技术可能很落后了,本人会好好学习新的技术,让自己的一直成长。若是需要这个简单的程序,可以直接找我。。
java web相册_javaWEB之-----------简单的相册管理相关推荐
- 《Java Web开发入门很简单》学习笔记
<Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...
- java web实验_javaweb实验报告
javaweb实验报告 甘肃政法学院本科生实验报告(一)姓名:学院:计算机科学学院专业: 计算机科学与技术班级实验课程名称:实验日期:2012 年 04 月 9 日指导教师及职称实验成绩:开课时间:2 ...
- java web创意_javaweb有什么能做的项目,最好比较有创意一点
有创意的JavaWeb项目 java 本人自己以想好项目,先谁有ajaxfileupload.js插件实现无刷新上传文件的例子 ?其他方法也行 邮箱 liuzhiming15955441@qq. co ...
- 1)Java web项目配置(最简单的javaweb项目)
Java web示例一 1.创建一个简单的Maven 项目 2.在webapp/WEB-INF下创建两个文件夹classes和lib,classes用来存放编译后输出的classes文件,lib用于存 ...
- java web日期_java-web——第十一课 时间类
前言: 在我们学习java web之中,实体类的属性经常会遇到时间类 时间类也是一个很重要的类, 首先我们先了解一下经常使用的时间类 经常使用的时间类也就是这三个类 具体的可以查阅api 我们这章主要 ...
- Java Web之过滤器的简单创建
Java Web开发中 的过滤器 ( filter ) 是 从Servlet 2.3规范开始增加 的 功能 , 并在Servlet 2.4规范中得到增强. 对Web应用来说 ,过滤器是 一个驻留在服务 ...
- java web 题_javaWeb习题与答案
<javaWeb习题与答案>由会员分享,可在线阅读,更多相关<javaWeb习题与答案(27页珍藏版)>请在人人文库网上搜索. 1.一.选择题(B) 01.WWW的英文全称是_ ...
- java web插件_javaweb项目插件实现机制
如题,java开发web程序想实现插件机制有什么办法? 就比如:一个论坛,里面有签到,积分,第三方登录,编辑器选择等等的功能,现在我想把他们都抽出来,当成插件,论坛核心只保留用户的登录,注册,发帖,回 ...
- java web 全局_JavaWeb - 【Listener】初始化全局资源
JavaWeb - [Listener]初始化全局资源 JavaWeb - [Listener]初始化全局资源 Listener使用步骤 Listener功能 初始化全局资源(读取配置文件) Serv ...
最新文章
- Codeforces Round #712 (Div. 2) F. Flip the Cards 思维 + 贪心
- junit junit_穿越JUnit流
- Java基础复习——继承机制
- 开发环境 测试环境 定义_如何快速搭建ES开发测试环境?
- 微信小程序API之video
- pycharm 安装gdal问题
- java复习即基础知识点 思维导图
- IT兄弟连 JavaWeb教程 JSP定义
- OkHttp的封装和使用详解
- OSChina 周六乱弹 ——程序员想让对象一辈子跟你的秘籍
- 字节跳动 AI Lab 总监李航:语言模型的过去、现在和未来
- 机器学习教程之朴素贝叶斯、贝叶斯信念网络
- 法宝合成时的五行位置分配是什么
- 整理的几种适用于GROMACS输入的小分子拓扑文件获取流程
- 云中和花木_王者荣耀:体验服4位英雄加强,狂铁不再“漏电”,云中君又行了...
- 82、详解一个交换机能带动多少个网络监控摄像头
- php获取用户和服务器ip及其地理位置详解
- cpu、内存、磁盘关系
- 使用Visual Studio调试BGFX的Shader
- Lua 起航 —— 一些常用基础语法
热门文章
- 2021年度海淀区实体书店扶持项目申报条件及奖励,补贴30万
- 实验篇---MPLS v+p+n + OSPF sham-link
- 资产价格与波动率的关系
- php获取域名后的东西,php获取域名_PHP 获取域名的几种方法
- OpenCV中的图像金字塔(高斯金字塔、拉普拉斯金字塔)
- 案例:各项目自己进行服务注册的案例
- Qt5.6.1移植海思Hi3521d(三)
- 【Windows】批处理 (cmd/bat) 常用命令小结
- lightroom磨皮滤镜中文插件Portraiture4最新版本
- 用PE系统中虚拟光驱进行MSDN XP系统安装