java实现上传图片存入到数据库

本文介绍如何使用Java将图片作为二进制数据直接保存到数据库中,而非仅存储文件路径。提供具体实现代码及下载链接。
Java Web 项目中实现上传 Excel 文件并将其内容存入数据库,通常包括以下几个步骤: 1. 用户上传 Excel 文件(前端) 2. 后端接收上传的文件(Servlet 或 Spring MVC) 3. 使用 Apache POI 解析 Excel 文件内容 4. 将解析后的数据插入数据库(JDBC 或 ORM 框架) 下面是一个使用 **Servlet + Apache POI + JDBC + MySQL** 的完整示例。 --- ## ✅ 一、准备环境 ### 1. 添加依赖(Maven) ```xml <dependencies> <!-- Apache POI for Excel parsing --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> <!-- MySQL JDBC Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> </dependencies> ``` --- ## ✅ 二、创建数据库表 假设我们要将 Excel 中的数据存入名为 `student` 的表中: ```sql CREATE TABLE student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), age INT, email VARCHAR(100) ); ``` --- ## ✅ 三、前端页面(上传 Excel) ```jsp <!DOCTYPE html> <html> <head> <title>上传Excel</title> </head> <body> <h2>上传Excel文件</h2> <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="excelFile" accept=".xls,.xlsx" required /> <input type="submit" value="上传" /> </form> </body> </html> ``` --- ## ✅ 四、后端处理(Servlet + Apache POI + JDBC) ### 1. `UploadServlet.java` ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.*; import javax.servlet.http.*; import java.io.InputStream; import java.sql.*; public class UploadServlet extends HttpServlet { private static final String DB_URL = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { Part filePart = request.getPart("excelFile"); InputStream fileContent = filePart.getInputStream(); try (Workbook workbook = new XSSFWorkbook(fileContent)) { Sheet sheet = workbook.getSheetAt(0); Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); String sql = "INSERT INTO student (name, age, email) VALUES (?, ?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); for (Row row : sheet) { if (row.getRowNum() == 0) continue; // 跳过标题行 Cell nameCell = row.getCell(0); Cell ageCell = row.getCell(1); Cell emailCell = row.getCell(2); String name = getCellValueAsString(nameCell); int age = (int) ageCell.getNumericCellValue(); String email = getCellValueAsString(emailCell); statement.setString(1, name); statement.setInt(2, age); statement.setString(3, email); statement.addBatch(); } statement.executeBatch(); statement.close(); conn.close(); response.getWriter().println("上传成功,数据已保存数据库"); } catch (Exception e) { e.printStackTrace(); response.getWriter().println("上传失败: " + e.getMessage()); } } private String getCellValueAsString(Cell cell) { if (cell == null) return ""; switch (cell.getCellType()) { case STRING: return cell.getStringCellValue(); case NUMERIC: return String.valueOf((int) cell.getNumericCellValue()); case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); default: return ""; } } } ``` --- ## ✅ 五、web.xml 配置(如果使用原生Servlet) ```xml <servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/upload</url-pattern> </servlet-mapping> ``` --- ## ✅ 六、测试上传的Excel格式示例 | 姓名 | 年龄 | 邮箱 | |--------|------|-------------------| | 张三 | 20 | zhangsan@example.com | | 李四 | 22 | lisi@example.com | --- ## ✅ 七、注意事项 - 使用 `request.getPart()` 需要 Servlet 3.1 以上。 - 建议使用 Spring Boot + MultipartResolver 简化上传处理。 - 如果 Excel 文件较大,建议使用 `SXSSF` 来优化内存。 - 实际项目中应加入事务处理、异常捕获、日志记录等。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值