Java 文件上传和下载指南301


Java 提供了各种库和 API,用于轻松有效地上传和下载文件。本文将深入探讨如何在 Java 中实现这些任务,并提供代码示例和最佳实践。

文件上传

要上传文件,您可以使用以下方法之一:

使用 Servlet:



import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = ("file");
String fileName = ();
Path uploadDirectory = ("uploads");
if (!(uploadDirectory)) {
(uploadDirectory);
}
InputStream inputStream = ();
Path filePath = ((), fileName);
(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING);
}
}

该 servlet 使用 @MultipartConfig 注解来启用多部分数据处理,并使用 getPart() 方法获取上传的文件。然后它将文件保存到 uploads 目录中。

使用 Apache Commons FileUpload:



import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if ((request)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List fileItems = (request);
for (FileItem fileItem : fileItems) {
if (!()) {
String fileName = ();
File file = new File("uploads", fileName);
(file);
}
}
} catch (FileUploadException e) {
();
}
}
RequestDispatcher rd = ("");
(request, response);
}
}

这个 servlet 使用 Apache Commons FileUpload 库来解析上传的文件。它将文件保存到 uploads 目录中,并在上传成功后转发到一个 JSP 页面。

文件下载

要下载文件,您可以使用以下方法之一:

使用 Servlet:



import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = ("file");
Path filePath = ("uploads", fileName);
if (!(filePath)) {
(HttpServletResponse.SC_NOT_FOUND);
return;
}
long fileSize = (filePath);
(fileSize);
("application/octet-stream");
("Content-Disposition", "attachment; filename=" + fileName + "");
OutputStream outputStream = ();
FileInputStream inputStream = new FileInputStream(());
(inputStream, outputStream);
}
}

这个 servlet 允许您通过提供文件的名称来下载文件。它发送适当的内容头,以便浏览器将其保存为附件。

使用 Spring MVC:



import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@Controller
public class DownloadController {
@GetMapping("/download/{file:.+}")
@ResponseBody
public void download(@PathVariable String file, HttpServletResponse response) throws IOException {
File fileToDownload = new File("uploads", file);
if (!()) {
(HttpServletResponse.SC_NOT_FOUND);
return;
}
("application/octet-stream");
("Content-Disposition", "attachment; filename=" + file + "");
FileInputStream inputStream = new FileInputStream(fileToDownload);
OutputStream outputStream = ();
(inputStream, outputStream);
}
}

这个 Spring MVC 控制器使用 @PathVariable 注解来获取文件的名称。它发送适当的内容头,以便浏览器将其保存为附件。

最佳实践

在实现文件上传和下载时,请遵循以下最佳实践:* 验证上传的文件大小是否在允许的范围内。
* 使用安全措施(如 CSRF 保护)来防止恶意文件上传。
* 妥善存储上传的文件,并使用适当的访问权限控制。
* 优化下载过程以提供最佳性能。
* 考虑使用文件压缩来减小文件大小并提高下载速度。
* 对于企业级应用程序,考虑使用消息队列或分布式存储系统来处理大文件或并发请求。

2024-11-20


上一篇:Java 中数组的实例化和使用

下一篇:Java 创建 MySQL 数据库教程