21xrx.com
2025-06-24 22:24:07 Tuesday
登录
文章检索 我的文章 写文章
Java 文件上传下载 IO 流:功能实现与应用案例
2023-06-18 15:17:01 深夜i     --     --
Java 文件上传 文件下载 IO

在许多 Web 应用中,文件上传和下载是常见且必要的功能。Java 提供了许多处理文件的 API,文件上传和下载也是可以通过 IO 流实现的。本文将介绍如何使用 Java 的 IO 流实现文件上传和下载,包括基于 Servlet 和 Spring MVC 框架的应用案例。

Java 文件上传:

1. 使用 Servlet 实现文件上传

文件上传的基本流程如下:

- 上传表单中包含一个 type="file" 的文件输入表单项;

- 在后台接收表单提交的 multipart/form-data 数据,并使用 FileItem 对象将输入流保存为文件。

上传代码示例:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 判断提交的表单是否包含 enctype="multipart/form-data"
if (!ServletFileUpload.isMultipartContent(request))
return;
// 配置上传参数
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
// 解析表单项并保存上传文件
List
  items = upload.parseRequest(request);
 
for (FileItem item : items) {
if (!item.isFormField()) {
File uploadedFile = new File("path/to/uploaded/file");
item.write(uploadedFile);
}
}
}

2. 使用 Spring MVC 实现文件上传

Spring MVC 提供了 MultipartFile 类型的方法参数,可以方便地处理上传文件。

上传代码示例:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
File uploadedFile = new File("path/to/uploaded/file");
FileCopyUtils.copy(bytes, uploadedFile);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded " + file.getOriginalFilename() + "!");
} catch (IOException e) {
e.printStackTrace();
}
} else {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
}
return "redirect:/";
}

Java 文件下载:

1. 使用 Servlet 实现文件下载

文件下载的基本流程如下:

- 在后台设置响应内容的 Content-Type 以及 Content-Disposition 信息;

- 将待下载的文件通过 IO 流写入响应的输出流。

下载代码示例:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取待下载的文件
File file = new File("path/to/downloaded/file");
// 设置响应信息
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
// 将文件通过 IO 流写入输出流
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.flush();
outputStream.close();
}

2. 使用 Spring MVC 实现文件下载

Spring MVC 提供了 ResponseEntity 类型的返回值,可以方便地处理下载文件。

下载代码示例:

@GetMapping("/download")
public ResponseEntity
  downloadFile() throws FileNotFoundException {
 
File file = new File("path/to/downloaded/file");
byte[] bytes = StreamUtils.copyToByteArray(new FileInputStream(file));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", file.getName());
headers.setContentLength(bytes.length);
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}

本文已经介绍了如何使用 Java 的 IO 流实现文件上传和下载,包括基于 Servlet 和 Spring MVC 框架的应用案例。在实际开发中,文件上传和下载是非常常见的功能,巩固这些知识点对于提高开发效率和质量有非常大的作用。

  
  

评论区