小李:嘿,小张,最近我们负责开发的毕业生就业管理系统快上线了,但我发现下载简历的功能还没搞定呢。
小张:对啊,这个功能确实需要完善。首先得从数据库里读取数据,然后让用户能下载文件。
小李:那咱们先说说怎么从数据库里获取数据吧?我听说你之前做过类似的事情。
小张:嗯,我可以给你看看代码。首先我们需要一个方法来查询数据库里的简历信息。
public List
List
try (Connection conn = Database.getConnection();
Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery("SELECT * FROM resumes");
while (rs.next()) {
Resume resume = new Resume(rs.getInt("id"), rs.getString("name"),
rs.getString("file_path"));
resumes.add(resume);
}
} catch (SQLException e) {
e.printStackTrace();
}
return resumes;
}
]]>
小李:看起来不错!接下来是如何让这些数据变成可下载的文件呢?
小张:这一步其实不难,我们可以使用Servlet来处理请求并返回文件流。
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id");
Resume resume = getResumeById(Integer.parseInt(id));
File file = new File(resume.getFilePath());
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + resume.getName() + "\"");
Files.copy(file.toPath(), response.getOutputStream());
response.getOutputStream().flush();
}
private Resume getResumeById(int id) {
// 调用前面提到的方法查询数据库
return getResumes().stream()
.filter(r -> r.getId() == id)
.findFirst()
.orElse(null);
}
}
]]>
小李:哇,代码看起来很专业!不过我觉得还需要一些异常处理,比如当文件不存在时应该提示用户。
小张:没错,我们可以在Servlet里加入判断逻辑。
if (!file.exists()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found!");
return;
}
]]>
小李:太棒了!这样我们的下载功能就完成了。你觉得还有什么需要补充的吗?
小张:我觉得可以考虑增加日志记录,方便后续排查问题。
小李:好主意!那我们现在就可以测试这个功能了。