Java实现图片上传及数据库存储 (java 图片 数据库)
随着互联网的发展,图片已经成为传递信息的重要手段之一。在很多网站上,用户需要上传图片来展示自己的信息或者分享一些内容。而如何实现图片的上传和存储则是一个非常关键的问题。本文将介绍如何使用Java语言实现图片上传并存储到数据库中。
一、准备工作
在实现图片上传和存储之前,我们需要准备好一些工具和环境。我们需要安装Java开发环境(JDK)和集成开发环境(IDE),本文使用的是JDK8和Eclipse。我们需要使用Tomcat作为Web服务器。我们需要使用MySQL数据库来存储上传的图片。
二、编写上传页面
我们需要编写一个上传页面,让用户可以选择要上传的图片。在这个页面中,需要使用HTML表单来实现文件上传的功能。下面是一个简单的HTML表单代码示例:
“`
选择文件:
“`
在这个表单中,我们使用了enctype=”multipart/form-data”来指定上传的文件类型,并使用了input type=”file”来创建文件选择框。表单的action属性指向我们即将编写的Servlet。
三、编写Servlet
在前面的步骤中,我们已经创建了一个上传页面,现在我们需要编写一个Servlet来处理由该页面提交的文件。Servlet是Java Web开发中的基本组成部分,它可以接收客户端请求并返回响应结果。
创建一个名为UploadServlet的Java类,并继承HttpServlet。然后,我们需要重写doPost方法,用于处理POST请求。下面是一个简单的示例代码:
“`
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet(“/uploadServlet”)
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 上传文件存储目录
private static final String UPLOAD_DIRECTORY = “upload”;
// 数据库连接信息
private static final String JDBC_DRIVER = “com.mysql.jdbc.Driver”;
private static final String DB_URL = “jdbc:mysql://localhost:3306/test”;
private static final String DB_USER = “root”;
private static final String DB_PASSWORD = “”;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html;charset=UTF-8”);
// 获取上传的文件
Part filePart = request.getPart(“file”);
String fileName = getFileName(filePart);
// 连接数据库
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// 插入数据库
String sql = “INSERT INTO images (filename, filepath) values (?, ?)”;
stmt = conn.prepareStatement(sql);
stmt.setString(1, fileName);
stmt.setString(2, UPLOAD_DIRECTORY + File.separator + fileName);
stmt.executeUpdate();
// 保存文件到磁盘
String uploadPath = getServletContext().getRealPath(“”) + UPLOAD_DIRECTORY;
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
filePart.write(uploadPath + File.separator + fileName);
// 成功上传
PrintWriter out = response.getWriter();
out.println(“文件上传成功!”);
out.close();
} catch (ClassNotFoundException | SQLException ex) {
ex.printStackTrace();
response.sendRedirect(“error.html”); // 处理上传失败情况
} finally {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
private String getFileName(final Part part) {
final String partHeader = part.getHeader(“content-disposition”);
for (String content : partHeader.split(“;”)) {
if (content.trim().startsWith(“filename”)) {
return content.substring(content.indexOf(‘=’) + 1).trim().replace(“\””, “”);
}
}
return null;
}
}
“`
在Servlet中,我们首先获取上传的文件和文件名,然后连接MySQL数据库,将文件名和路径插入到数据库中。接着,我们将上传的文件保存到web应用根目录下的upload文件夹中。
四、创建数据库表
在我们的Java程序中,我们使用了MySQL数据库来存储上传的图片。因此,在使用程序之前,我们需要创建一个名为“images”的表来存储图片信息。
“`
CREATE TABLE images (
id int(11) NOT NULL AUTO_INCREMENT,
filename varchar(255) DEFAULT NULL,
filepath varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
“`
在这个表中,我们定义了三个列,分别是id、filename和filepath。其中,id列是自动递增的主键。
五、测试上传功能
现在,我们已经完成了Java实现图片上传和数据库存储的所有步骤。接下来,我们需要测试一下我们的程序是否可以正常工作。
我们需要将上传页面和Servlet部署到Tomcat服务器中。然后,我们启动Tomcat服务器,并在浏览器中访问上传页面。
选择一个图片文件并点击上传按钮,我们会看到一个成功上传的提示信息。同时,这个图片会被保存到我们的数据库和web应用根目录下的upload文件夹中。
六、
在本文中,我们介绍了如何使用Java语言实现图片上传并存储到数据库中。通过使用这个程序,我们可以轻松地实现图片上传和存储,并且可以方便地获取上传的图片信息。除此之外,我们还可以根据我们的需求修改这个程序,使其更加符合我们的实际情况。