使用Servlet实现数据库图片上传 (servlte数据库上传图片)
随着互联网的快速发展,图片的应用越来越广泛,如何将图片上传到数据库已成为当前开发中必备的技能之一。本文将介绍如何,并为大家详细展示实现过程。
一、搭建环境
本文的代码是基于Eclipse JEE版本来实现的,因此需要先下载并安装相应的软件环境。
二、创建项目
创建一个新的Web项目,设置JRE版本,项目构建技术为Maven,并添加相应的依赖,在pom.xml文件中添加以下代码:
“`xml
javax.servlet
javax.servlet-api
3.1.0
provided
org.apache.tomcat
tomcat-dbcp
9.0.0.M4
provided
commons-fileupload
commons-fileupload
1.3.1
compile
commons-io
commons-io
2.4
compile
mysql
mysql-connector-java
5.1.26
provided
org.apache.poi
poi
3.17
org.apache.poi
poi-ooxml
3.17
org.apache.poi
poi-ooxml-schemas
3.17
“`
三、创建数据库
创建一个数据库表,用于存储上传的图片,包含以下字段:
id:作为主键,自增长
file_name:图片的文件名
content_type:图片的类型
file_size:图片的大小
data:图片的字节流
四、编写上传Servlet
编写上传Servlet,上传过程中需要进行以下处理:
获取上传文件的大小及类型,如果不符合规则,直接返回错误信息;
将上传文件转化为字节流,将字节流存入数据库中。
以下是具体实现的代码:
上传文件:
“`java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
out.println(“文件未上传!”);
return;
}
String uploadFilePath = request.getServletContext().getRealPath(“/”) + “upload/”;
File uploadFolder = new File(uploadFilePath);
if (!uploadFolder.exists()) {
uploadFolder.mkdirs();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(uploadFolder);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(“UTF-8”);
upload.setSizeMax(MAX_UPLOAD_SIZE);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
if (items == null) {
out.write(“文件未上传!”);
return;
}
for (FileItem item : items) {
if (item.isFormField()) {
continue;
}
String fileName = item.getName();
if (StringUtils.isEmpty(fileName)) {
continue;
}
if (StringUtils.indexOf(fileName, “/”) >= 0) {
fileName = StringUtils.substringAfterLast(fileName, “/”);
}
if (StringUtils.indexOf(fileName, “\\”) >= 0) {
fileName = StringUtils.substringAfterLast(fileName, “\\”);
}
String contentType = item.getContentType();
if (StringUtils.isEmpty(contentType)) {
continue;
}
InputStream inputStream = null;
try {
long fileSize = item.getSize();
if (StringUtils.isEmpty(fileName) || fileSize > MAX_UPLOAD_SIZE) {
return;
}
byte[] fileBuffer = new byte[(int) fileSize];
inputStream = item.getInputStream();
inputStream.read(fileBuffer, 0, (int) fileSize);
Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(INSERT_QUERY);
pstmt.setString(1, fileName);
pstmt.setString(2, contentType);
pstmt.setLong(3, fileSize);
pstmt.setBytes(4, fileBuffer);
pstmt.executeUpdate();
if (inputStream != null) {
inputStream.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
out.print(“文件上传成功!”);
}
}
“`
五、
本文介绍了如何,并通过详细的代码展示了实现过程。如果你也想在项目中实现图片上传功能,可以根据本文的步骤进行操作,相信能够顺利实现。