项目目录结构
假设你的项目目录结构如下:
YourProject
│
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ ├── servlet
│ │ │ │ └── UploadServlet.java
│ │ │ └── util
│ │ │ └── DatabaseUtil.java
│ │ └── resources
│ │ └── META-INF
│ │ └── persistence.xml
├── webapp
│ ├── uploads
│ ├── index.jsp
│ └── WEB-INF
│ ├── web.xml
│
└── pom.xml (如果使用Maven)
1. 前端部分(JSP)
webapp/index.jsp
<!DOCTYPE html>
<html>
<head>
<title>Upload Image</title>
</head>
<body>
<h1>Upload Image</h1>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
2. 后端部分(Servlet)
src/main/java/com/example/servlet/UploadServlet.java
package com.example.servlet;
import com.example.util.DatabaseUtil;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
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("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
String fileName = getFileName(filePart);
String uploadPath = getServletContext().getRealPath("") + File.separator + "uploads";
// 创建保存目录
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) uploadDir.mkdir();
// 保存文件到指定目录
filePart.write(uploadPath + File.separator + fileName);
// 生成图片URL
String fileUrl = request.getContextPath() + "/uploads/" + fileName;
// 保存URL到数据库
DatabaseUtil.saveFileUrlToDatabase(fileUrl);
// 返回结果给客户端
response.getWriter().println("File uploaded successfully! File URL: " + fileUrl);
}
private String getFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] items = contentDisposition.split(";");
for (String item : items) {
if (item.trim().startsWith("filename")) {
return item.substring(item.indexOf("=") + 2, item.length() - 1);
}
}
return "";
}
}
3. 数据库操作部分
src/main/java/com/example/util/DatabaseUtil.java
package com.example.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DatabaseUtil {
private static final String DB_URL = "jdbc:mysql://localhost:3306/yourdatabase";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "password";
public static void saveFileUrlToDatabase(String fileUrl) {
String sql = "INSERT INTO user_avatars (file_url) VALUES (?)";
try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, fileUrl);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4. Web配置文件
webapp/WEB-INF/web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.example.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
</web-app>
5. 数据库设置
你需要确保数据库中有一个名为user_avatars
的表,至少有一个名为file_url
的字段用于存储文件URL:
CREATE TABLE user_avatars (
id INT AUTO_INCREMENT PRIMARY KEY,
file_url VARCHAR(255) NOT NULL
);
6. Maven配置(可选)
如果你使用Maven进行项目管理,pom.xml
示例如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>upload-image</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>upload-image</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
以上就是如何在JavaWeb项目中实现图片上传,并将图片的URL地址存储到数据库中。如果你有更多的定制需求,可以在此基础上进行进一步扩展和修改。