如何用jsp、mysql、servlet实现文件的上传和下载
时间: 2023-10-08 20:13:24 浏览: 141
基于JSP+Java+mysql文件上传与下载
5星 · 资源好评率100%
实现文件的上传和下载可以分为以下几个步骤:
1. 创建一个上传文件的表单页面,包括一个文件选择框和一个提交按钮。
2. 创建一个servlet,用于接收上传的文件。在servlet中,需要先判断上传的文件是否符合要求(如文件类型、大小等),然后将文件保存到服务器的指定位置,并在数据库中记录文件的相关信息(如文件名、保存路径、上传时间等)。
3. 创建一个下载文件的servlet,用于根据用户请求下载指定的文件。在servlet中,需要根据请求中的文件名,在数据库中查询文件的保存路径,然后将文件以流的形式输出到客户端。
下面是一个基本的实现示例:
上传文件的表单页面 upload.jsp:
```html
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
```
上传文件的servlet UploadServlet.java:
```java
@WebServlet("/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传的文件
Part part = request.getPart("file");
String fileName = part.getSubmittedFileName();
// 判断文件类型和大小等限制
// ...
// 保存文件到服务器指定位置
String savePath = "/uploads/" + fileName;
part.write(savePath);
// 在数据库中记录文件信息
Connection conn = null;
PreparedStatement ps = null;
try {
conn = getConnection();
ps = conn.prepareStatement("insert into file (name, path, time) values (?, ?, ?)");
ps.setString(1, fileName);
ps.setString(2, savePath);
ps.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeConnection(conn, ps, null);
}
}
}
```
下载文件的servlet DownloadServlet.java:
```java
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求中的文件名
String fileName = request.getParameter("filename");
// 在数据库中查询文件的保存路径
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = getConnection();
ps = conn.prepareStatement("select path from file where name = ?");
ps.setString(1, fileName);
rs = ps.executeQuery();
if (rs.next()) {
String filePath = rs.getString("path");
// 将文件以流的形式输出到客户端
File file = new File(filePath);
response.setContentType(getServletContext().getMimeType(filePath));
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
InputStream in = new BufferedInputStream(new FileInputStream(file));
OutputStream out = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[8192];
int len = 0;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.flush();
out.close();
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeConnection(conn, ps, rs);
}
}
}
```
其中,getConnection()和closeConnection()方法用于获取和关闭数据库连接,这里不再赘述。需要注意的是,以上代码仅为示例,实际应用中需要根据具体情况进行修改和完善。
阅读全文