java后端上传附件到数据库
时间: 2025-05-05 22:19:06 浏览: 27
### Java 后端实现文件上传并存储至数据库
为了实现在Java后端将文件上传并保存到数据库中的功能,可以按照如下方法进行:
#### 准备工作
确保已经完成MySQL驱动的加载。可以通过`Class.forName("com.mysql.cj.jdbc.Driver")`; 来加载MySQL驱动程序[^1]。
#### 创建表结构支持二进制数据存储
在创建用于存储文件的数据表时,应该选用适合存储大对象(BLOB)的数据类型来容纳文件内容。例如,在SQL语句中定义字段为BLOB或LONGBLOB类型以便能够处理较大尺寸的文件。
#### 编写Java代码实现文件上传逻辑
下面给出一段简单的Servlet代码片段作为示例,展示如何接收来自客户端提交的文件流,并将其转换成字节数组形式存入数据库:
```java
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file");
InputStream inputStream = null;
try (Connection conn = DriverManager.getConnection(url, user, password)) {
String sql = "INSERT INTO files(name, content) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, getFileName(filePart));
// 获取输入流
inputStream = filePart.getInputStream();
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
// 设置参数值
pstmt.setBytes(2, buffer);
int affectedRows = pstmt.executeUpdate();
if (affectedRows > 0){
System.out.println("File uploaded successfully.");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(inputStream != null){
inputStream.close();
}
}
}
private static 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;
}
```
上述代码展示了通过HTTP POST请求获取上传文件的部分,并利用PreparedStatement执行带有占位符的安全查询以避免SQL注入攻击[^4]。
#### 处理从数据库读取文件并向前端提供服务
当需要从前端访问这些已上传的文件时,则需编写额外的服务接口负责检索对应的记录并将文件内容响应给浏览器下载或是嵌入页面显示出来。这部分涉及到Base64编码解码以及HttpServletResponse设置相应头信息等内容[^3]。
阅读全文
相关推荐

















