这篇攻略是介绍如何使用 JSP 和 Servlet 来实现文件上传下载以及删除上传文件。其中包含以下内容:
- 上传文件处理(上传文件存储,上传文件名称处理)
- 下载文件处理(下载文件存储)
- 删除文件处理
除此之外,还会用到一些库和工具,如 commons-fileupload、commons-io、bootstrap。
上传文件处理
上传文件存储
在上传文件之前,需要在项目 WebContent 目录下创建 upload 文件夹,保存上传的文件。
String uploadFilePath = request.getSession().getServletContext()
.getRealPath("/upload/"); // 获取上传路径
File uploadDir = new File(uploadFilePath);
if (!uploadDir.exists()) {
uploadDir.mkdir(); // 如果目录不存在,则创建目录
}
上传文件名称处理
上传文件的名称可能会包含中文等特殊字符,需要对其进行处理。可以使用 common-io 库来解决这个问题。
String filename = item.getName();
String saveFilename = UUID.randomUUID().toString() + "_" +
FilenameUtils.getName(filename); // 生成随机的文件名
File saveFile = new File(uploadFilePath, saveFilename);
item.write(saveFile); // 保存文件
使用 FilenameUtils.getName() 方法来获取原始文件名,然后拼接一个随机生成的字符串作为新文件名。最后,将上传的文件保存到 upload 文件夹中。
下载文件处理
下载文件时,需要根据文件名查询存储路径,并将文件的内容以流的方式写入到 HttpServletResponse 中。
String filePath = request.getSession().getServletContext()
.getRealPath("/upload/"); // 获取文件路径
File file = new File(filePath + File.separator + filename);
if (file.exists()) {
response.setContentType("application/octet-stream"); // 设置文件类型
response.setHeader("Content-Disposition", "attachment;filename=" +
new String(filename.getBytes("GB2312"), "ISO-8859-1")); // 设置文件名
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(file);
out = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
删除文件处理
删除文件时,需要根据文件名查询存储路径,并使用 File 类的 delete() 方法来删除文件。
String filePath = request.getSession().getServletContext()
.getRealPath("/upload/"); // 获取文件路径
File file = new File(filePath + File.separator + filename);
if (file.exists()) {
file.delete();
// 返回删除成功的信息
} else {
// 返回文件不存在的信息
}
使用 File 类的 delete() 方法可以直接删除文件。注意,如果文件不存在,需要返回相应的错误信息。
示例代码:
在实际项目中,可能需要使用到 Bootstrap 等库来美化页面,这里就不再展示相关内容。完整的示例代码可以参考 Github。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jsp+Servlet实现文件上传下载 删除上传文件(三) - Python技术站