首先使用的是Controller ——》Service——》Repository这样一个框架,也可以简化,核心不复杂,然后我们是使用的IDEA进行开发
1. 首先创建一个提交表单
<form action="...." method="post" enctype="multipart/form-data">
<input type="file" >
注意这里method和enctype一定要按这样的格式写,之后设置input type为file
2.介绍我们的核心组件
在web-inf中创建lib,导入两个包
网上可以下载,这是文件上传所必要的包。
3.继承httpServlet,注解地址,然后重写dopost方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//创建核心组件
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//拿到一个FileItem集合
List<FileItem> list = servletFileUpload.parseRequest(req);
for(FileItem fileItem : list){
//判断传递来的是否是文件
if(fileItem.isFormField()){ //说明是表单数据,则说明出现错误
return;
}else{ //说明是文件
String fileName = fileItem.getName();
//获取输入流
InputStream inputStream = fileItem.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
//输出流写图片数据
int temp = 0;
byte[] b = new byte[1024];
while ((temp = inputStream.read(b))!= -1){
out.write(b,0,temp);
}
// 获取图片二进制数据
byte[] array = out.toByteArray();
HomePageServiceImpl homePageService = new HomePageServiceImpl();
//获取session中的tel
HttpSession httpSession = req.getSession();
String tel = (String)httpSession.getAttribute("utel");
if(homePageService.UploadUserCover(array,tel)){
System.out.println("上传成功");
} else {
System.out.println("上传失败");
}
//关闭相关组件
out.close();
inputStream.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
因为我有别的需求,所以代码中参杂了一点别的内容,核心就是获取了图片的byte[]数组,然后接下来传递给我们的Service
Service主要创建一个插入数据库的实现类,这里就不展示代码了,直接看数据库
这里是更新表中的照片,插入只需要改变sql语句就可以了,与数据库去的连接的步骤就省略了,因为我创建了一个工具进行连接,每个人会有不一样,
String sql = ("update person set usercover=? ");
try {
//创建blob对象便于传入数据库
Blob blob = connection.createBlob();
blob.setBytes(1,bytes);
//写入数据
statement = connection.prepareStatement(sql);
statement.setBlob(1,blob);
//num用于接收结果,这个不是重点,下面这条语句执行完,数据库就已经更新了
num = statement.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
//释放资源
JDBCTools.release(connection, statement, resultSet);
}
return num;
}
4.检查
然后程序不报错的话,我们可以打开数据库检查,打开我们的DataGrip,(挺好用的哈),也可以是别的
我们的图片已经存进去了。如果想要看更简明的步骤可以看我另一篇文章。
怎样向MySql中存入图片