Struts实现单文件上传、修改、删除(以图片为例)
来源:互联网 发布:傅园慧网络直播回看 编辑:程序博客网 时间:2024/05/17 01:43
一、文件上传
思想:图片是以流的方式进行读取,上传的图片存放在服务器端的某个文件夹中,数据库中保存的是上传的图片的地址。
1.ActionForm(userForm)
private FormFile image;//用于封装从jsp页面传过来的文本类型的属性
2.pojo(User)
private String path;//用于存放上传图片的地址,数据库中需要添加存放该地址的字段
3.jsp
<html:form action=" " enctype="multipart/form-data">//form设置了enctype属性后就是二进制传输数据了
<html:file property="image"></html:file>
</html:form>
4.action
String basePath=this.getServlet().getServletContext().getRealPath("/");//获得服务器的基路径
String path="/uploadImage/"+userService.picturePath(userForm.getImage());//上传图片保存的相对路径,图片 名通过userService中的picturePath方法进行处理
String endString=userForm.getImage().getFileName().substring
(userForm.getImage().getFileName().lastIndexOf(".")+1);//获取图片的后缀名
5.service(userService)
if("jpg".equals(endString)||"png".equals(endString)||"gif".equals(endString)||"JPG".equals(endString)||
"PNG".equals(endString)||"GIF".equals(endString)){//限制上传图片的类型
userDAO.saveImage(image,basePath,path);//保存图片
user.setPath(path);//将上传图片的路径(地址)进库
}else{
user.setPath(" ");//上传的图片不符合要求,在数据库中设置为空
}
6.dao(userDAO)
public String picturePath(FormFile image){//处理上传的图片名,UUIDGenerator详见相关日志
String filename=" ";//初始化变量
UUIDGenerator g=new UUIDGenerator();//创建UUIDGenerator类的一个对象
filename=image.getFileName();//将图片的文件名赋值给变量
if(filename.length()>0){
filename=filename.substring(filename.lastIndexOf("."));//将文件名除了后缀名的部分赋给filename变量
}
filename=(String)g.generate()+filename;//对上传的图片文件名进行处理,以免出现上传的图片名相同
return filename;
}
public void saveImage(FormFile image,String basePath,String path) throws IOException{//上传图片
FileOutputStream fos=null;//文件输出流
BufferedInputStream in=null;//缓冲的输入流
BufferedOutputStream out=null;//缓冲的输出流
try {
fos=new FileOutputStream(basePath+path);//创建一个向指定File对象表示的文件中写入数据的输出流
in=new BufferedInputStream(image.getInputStream());//创建BufferedInputStream并保存其参数,即输入流 in,以便将来使用
out=new BufferedOutputStream(fos);//创建一个新的缓冲输出流,以将数据写入指定的基础输出流
byte[] buf=new byte[8192];//创建一个字节缓冲数组,用于指定每次写入的字节大小(8192=8k)
int readSize;
while((readSize=in.read(buf))!=-1){//判断缓冲数组中是否还有数据
out.write(buf, 0, readSize);//将指定buf数组中从偏移量0开始的readSize个字节写入此缓冲的输出流
out.flush();//关闭缓冲的输出流
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
二、文件删除
思路:上传的文件存放在某个文件夹中,该图片的地址存放在数据库中,因此,在删除图片的时候,不仅要删除它在数据库中的地址,而且还要删除在文件夹中的文件,删除图片之前要获取该图片的绝对路径。
1.action(userAction)
String basepath=this.getServlet().getServletContext().getRealPath("/");//获得服务器基路径
2.service(userService)
userDAO.deleteImage(uId,basepath);//删除图片
userDAO.deleteUser(uId);//删除图片在数据库中的路径
3.dao(userDAO)
public void deleteImage(Integer uId,String basepath){
User user=this.getUserById(uId);//取出某个用户对象(获得图片的相对路径)
String path=user.getPath();//将图片的相对路径赋值
if(path!=null){
File file=new File(basepath+path);//根据绝对路径创建一个文件对象
file.delete();//删除文件
}
}
三、修改文件
思路:先将原来的图片删除,然后重新上传一张图片
1.jsp(edit.jsp)
<html:hidden property="path"/>//获得原来图片的路径放在隐藏域中(尤其要注意)
<html:file property="image"/>
2.action(userAction)
String basepath=this.getServlet().getServletCotext().getRealPath("/");//获得服务器基路径
String path=null;
if(userForm.getImage().getFileSize()>0){//判断是否需要修改图片
path="/uploadImage/"+userForm.getImage();
}
userService.modify(basepath,path,userForm.getImage());//调用修改的方法
3.service(userService)
if(user.getPath()!=null&&path!=null){//需要修改图片的情况
userDAO.deleteImage(basepath+path);//根据绝对路径删除图片
userDAO.saveImage(image,basepath,path);//根据相对路径重新上传一张图片
user.setPath(path);//将新路径保存到user对象中
}
userDAO.modify(id,user);
4.dao(userDAO)方法同上
思想:图片是以流的方式进行读取,上传的图片存放在服务器端的某个文件夹中,数据库中保存的是上传的图片的地址。
1.ActionForm(userForm)
private FormFile image;//用于封装从jsp页面传过来的文本类型的属性
2.pojo(User)
private String path;//用于存放上传图片的地址,数据库中需要添加存放该地址的字段
3.jsp
<html:form action=" " enctype="multipart/form-data">//form设置了enctype属性后就是二进制传输数据了
<html:file property="image"></html:file>
</html:form>
4.action
String basePath=this.getServlet().getServletContext().getRealPath("/");//获得服务器的基路径
String path="/uploadImage/"+userService.picturePath(userForm.getImage());//上传图片保存的相对路径,图片 名通过userService中的picturePath方法进行处理
String endString=userForm.getImage().getFileName().substring
(userForm.getImage().getFileName().lastIndexOf(".")+1);//获取图片的后缀名
5.service(userService)
if("jpg".equals(endString)||"png".equals(endString)||"gif".equals(endString)||"JPG".equals(endString)||
"PNG".equals(endString)||"GIF".equals(endString)){//限制上传图片的类型
userDAO.saveImage(image,basePath,path);//保存图片
user.setPath(path);//将上传图片的路径(地址)进库
}else{
user.setPath(" ");//上传的图片不符合要求,在数据库中设置为空
}
6.dao(userDAO)
public String picturePath(FormFile image){//处理上传的图片名,UUIDGenerator详见相关日志
String filename=" ";//初始化变量
UUIDGenerator g=new UUIDGenerator();//创建UUIDGenerator类的一个对象
filename=image.getFileName();//将图片的文件名赋值给变量
if(filename.length()>0){
filename=filename.substring(filename.lastIndexOf("."));//将文件名除了后缀名的部分赋给filename变量
}
filename=(String)g.generate()+filename;//对上传的图片文件名进行处理,以免出现上传的图片名相同
return filename;
}
public void saveImage(FormFile image,String basePath,String path) throws IOException{//上传图片
FileOutputStream fos=null;//文件输出流
BufferedInputStream in=null;//缓冲的输入流
BufferedOutputStream out=null;//缓冲的输出流
try {
fos=new FileOutputStream(basePath+path);//创建一个向指定File对象表示的文件中写入数据的输出流
in=new BufferedInputStream(image.getInputStream());//创建BufferedInputStream并保存其参数,即输入流 in,以便将来使用
out=new BufferedOutputStream(fos);//创建一个新的缓冲输出流,以将数据写入指定的基础输出流
byte[] buf=new byte[8192];//创建一个字节缓冲数组,用于指定每次写入的字节大小(8192=8k)
int readSize;
while((readSize=in.read(buf))!=-1){//判断缓冲数组中是否还有数据
out.write(buf, 0, readSize);//将指定buf数组中从偏移量0开始的readSize个字节写入此缓冲的输出流
out.flush();//关闭缓冲的输出流
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
二、文件删除
思路:上传的文件存放在某个文件夹中,该图片的地址存放在数据库中,因此,在删除图片的时候,不仅要删除它在数据库中的地址,而且还要删除在文件夹中的文件,删除图片之前要获取该图片的绝对路径。
1.action(userAction)
String basepath=this.getServlet().getServletContext().getRealPath("/");//获得服务器基路径
2.service(userService)
userDAO.deleteImage(uId,basepath);//删除图片
userDAO.deleteUser(uId);//删除图片在数据库中的路径
3.dao(userDAO)
public void deleteImage(Integer uId,String basepath){
User user=this.getUserById(uId);//取出某个用户对象(获得图片的相对路径)
String path=user.getPath();//将图片的相对路径赋值
if(path!=null){
File file=new File(basepath+path);//根据绝对路径创建一个文件对象
file.delete();//删除文件
}
}
三、修改文件
思路:先将原来的图片删除,然后重新上传一张图片
1.jsp(edit.jsp)
<html:hidden property="path"/>//获得原来图片的路径放在隐藏域中(尤其要注意)
<html:file property="image"/>
2.action(userAction)
String basepath=this.getServlet().getServletCotext().getRealPath("/");//获得服务器基路径
String path=null;
if(userForm.getImage().getFileSize()>0){//判断是否需要修改图片
path="/uploadImage/"+userForm.getImage();
}
userService.modify(basepath,path,userForm.getImage());//调用修改的方法
3.service(userService)
if(user.getPath()!=null&&path!=null){//需要修改图片的情况
userDAO.deleteImage(basepath+path);//根据绝对路径删除图片
userDAO.saveImage(image,basepath,path);//根据相对路径重新上传一张图片
user.setPath(path);//将新路径保存到user对象中
}
userDAO.modify(id,user);
4.dao(userDAO)方法同上
- Struts实现单文件上传、修改、删除(以图片为例)
- Struts实现单文件上传、修改、删除(以图片为例)
- ajax上传文件(以图片为例) SpringMVC
- 下载,更新及删除文件(以图片为例)
- struts实现单文件上传
- 在struts2中实现文件上传(以图片上传为例)
- Android上传文件到服务器(以上传图片为例)
- 以Sequence方式处理上传的文件(此处文件以图片为例)
- 原java上传文件 以图片为例 纯Servlet实现
- ajax无刷新上传文件(以上传图片为例)
- struts 单文件上传
- struts 单文件文件上传
- Struts实现图片上传
- Struts:实现图片上传
- Struts实现图片上传
- Servlet的相关知识(以文件上传为例)
- Struts文件上传--1.单文件上传
- struts2多文件上传(修改名称、压缩图片、删除图片)
- 黑马程序员_交通灯管理系统
- 图的邻接矩阵和邻接表表示法
- uva 10594 - Data Flow(费用流)
- 在ubuntu下的快速安装mysql和 Python MySQLdb
- peekmessage与GetMessage和VC之SendMessage与PostMessage的区别
- Struts实现单文件上传、修改、删除(以图片为例)
- Oracle客戶端远程导入、导出
- 计算机书籍推荐
- 关于一个页面里面有两个按钮的解决。
- 黑马程序员_银行业务调度系统
- MYSQL远程连接数据
- (Relax 数论1.26)POJ 1496 Word Index(计算一个字符串在字典中的位置)
- Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
- Leetcode Combinations