使用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(“文件上传成功!”);

}

}

“`

五、

本文介绍了如何,并通过详细的代码展示了实现过程。如果你也想在项目中实现图片上传功能,可以根据本文的步骤进行操作,相信能够顺利实现。


数据运维技术 » 使用Servlet实现数据库图片上传 (servlte数据库上传图片)