jsp从数据库下载文件
时间: 2023-08-12 09:07:04 浏览: 39
您可以使用JSP与数据库交互,然后下载文件。以下是一个示例代码,您可以参考:
```jsp
<%@ page import="java.io.*,java.sql.*" %>
<%
// 连接数据库
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/dbname";
String username = "username";
String password = "password";
Connection conn = null;
try{
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
// 查询数据库获取文件数据
String sql = "SELECT file_data, file_name FROM files WHERE id = ?";
int fileId = Integer.parseInt(request.getParameter("fileId"));
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, fileId);
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
// 获取文件数据和文件名
Blob fileData = rs.getBlob("file_data");
String fileName = rs.getString("file_name");
// 设置响应头,告诉浏览器下载文件
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 获取输出流,将文件写入响应
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = fileData.getBinaryStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
}
pstmt.close();
stmt.close();
} catch(Exception e){
e.printStackTrace();
} finally{
if(conn != null){
try{
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
}
}
%>
```
此代码通过JSP连接数据库(假设使用MySQL),查询指定文件的数据和文件名。然后,通过设置响应头告诉浏览器下载文件,并将文件数据写入响应输出流。
请根据您的数据库和文件表结构进行适当的修改,并确保已正确配置数据库驱动程序。