实现思路:
存:在进行上传图片时,为了防止图片名重复先使用时间戳对图片名进行重命名,然后再把图片放在Web项目路径下,最后把图片的路径存放在数据库中。 取:从数据库中取出相应的图片路径,回显到前端页面
工具:
IDEAMysqlfileUpload
实现步骤
1:导入依赖jar包
commons-fileUpload.jarcommons-io.jar
使用fileUpload组件首先需要引入的·两个jar包
2:数据库操作准备
创建用户表
CREATE TABLE blogger
(
blogger_id
INT PRIMARY KEY auto_increment,
name_id
VARCHAR(50) NOT NULL UNIQUE,
nick_name
VARCHAR(50) NOT NULL UNIQUE,
gender
TINYINT,
header_por
VARCHAR(80)
)
存储图片的字段(header_por)类型是字符型,用来存储图片路径
用户表实体映射 Blogger.java
public class Blogger {
private int blogger_id
;
private String name_id
;
private String nick_name
;
private Integer gender
;
private String header_por
;
private String email
;
private String brief_intro
;
private String pass
;
private int state
;
private String active_code
;
private Integer expire_time
;
public int getBlogger_id() {
return blogger_id
;
}
public void setBlogger_id(int blogger_id
) {
this.blogger_id
= blogger_id
;
}
public String
getName_id() {
return name_id
;
}
public void setName_id(String name_id
) {
this.name_id
= name_id
;
}
public String
getNick_name() {
return nick_name
;
}
public void setNick_name(String nick_name
) {
this.nick_name
= nick_name
;
}
public Integer
getGender() {
return gender
;
}
public void setGender(Integer gender
) {
this.gender
= gender
;
}
public String
getHeader_por() {
return header_por
;
}
public void setHeader_por(String header_por
) {
this.header_por
= header_por
;
}
}
}
Dao层操作数据库存贮图片路径 bloggerDao.java
public class BloggerDao {
JdbcTemplate template
= new JdbcTemplate(JDBCUtils
.getDataSource());
public int updateHead(int id
,String headUrl
) {
String sql
= "update blogger set header_por = ? where blogger_id = ?";
int n
= template
.update(sql
,headUrl
,id
);
return n
;
}
}
3:servlet编写
@WebServlet("/uploadImageServlet")
public class UploadImageServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
HttpSession session
= request
.getSession();
Object file
= request
.getParameter("file");
Blogger blogger
= (Blogger
) session
.getAttribute("blogger");
String headUrl
= "";
String headImgFileName
= "headImage";
if (ServletFileUpload
.isMultipartContent(request
)) {
try {
DiskFileItemFactory factory
= new DiskFileItemFactory();
ServletFileUpload sfu
= new ServletFileUpload(factory
);
sfu
.setSizeMax(10 * 1024 * 1024);
sfu
.setHeaderEncoding("utf-8");
@SuppressWarnings("unchecked")
List
<FileItem> fileItemList
= sfu
.parseRequest(request
);
Iterator
<FileItem> fileItems
= fileItemList
.iterator();
while (fileItems
.hasNext()) {
FileItem fileItem
= fileItems
.next();
if (fileItem
.isFormField()) {
String name
= fileItem
.getFieldName();
String value
= fileItem
.getString("utf-8");
System
.out
.println(name
+ " = " + value
);
}
else {
String fileName
= fileItem
.getName();
System
.out
.println("原文件名:" + fileName
);
String suffix
= fileName
.substring(fileName
.lastIndexOf('.'));
System
.out
.println("扩展名:" + suffix
);
String newFileName
= new Date().getTime() + suffix
;
System
.out
.println("新文件名:" + newFileName
);
ServletContext context
= this.getServletContext();
String serverPath
= context
.getRealPath("")+headImgFileName
;
System
.out
.println(serverPath
);
File headFile
= new File(serverPath
);
if (!headFile
.exists()) {
headFile
.mkdirs();
}
File headImage
= new File(serverPath
,newFileName
);
fileItem
.write(headImage
);
fileItem
.delete();
headUrl
= headImgFileName
+"/"+newFileName
;
System
.out
.println(headUrl
);
BloggerDao bloggerDao
= new BloggerDao();
if(bloggerDao
.updateHead(blogger
.getBlogger_id(),headUrl
) > 0) {
System
.out
.println("修改头像图片地址成功");
session
.setAttribute("headUrl",headUrl
);
response
.sendRedirect(" ../jsp/blogger.jsp");
} else {
System
.out
.println("头像路径更改失败");
}
}
}
} catch (FileUploadException e
) {
e
.printStackTrace();
} catch (Exception e
) {
e
.printStackTrace();
}
} else {
System
.out
.println("请求格式错误");
}
}
@Override
protected void doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
this.doPost(request
,response
);
}
注意:上面代码最后有一个存储图片路径到数据库的操作,需要自己编写,就是简单地数据库操作,相信大家肯定都会
4:jsp编写
blogger.jsp
<form id="headImgForm" method="post"enctype="multipart/form-data">
// ../${blogger.header_por}是数据回显,当数据库存储之后,把上传的图片路径存储在session里,前端直接获取session里路径的值,显示图片。这里是相对路径,大家需要根据先jsp文件所在的位置与Web项目下存储图片的位置编写自己的相对路径
<img src="../${blogger.header_por}" class="head" id="image">
<input type="file" name="files" id="file">
<input type="submit" value="上传头像"/>
</form>
注意:
普通表单提交默认enctype=“application/x-www-form-urlencoded”;但是当表单中存在文件类型时,需要设置enctype=“multipart/form-data”,它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype);还有一种enctype="text/plain"用于发送纯文本内容。表单请求方式必须为post。接收时不能再用request.getParameter(),而是request.getInputStream()解析二进制流,得到ServletInputStream对象。
大功告成
这样就可以完成了jsp+servlet+Mysql 在数据库中的存取操作了
如果大家想了解学习更多有关FileUpload的知识,可以看看这篇博客: java web文件上传——FileUpload
参考文章链接
https://www.jb51.net/article/107000.html https://blog.csdn.net/linghuainian/article/details/82253247