21xrx.com
2024-12-27 20:32:41 Friday
登录
文章检索 我的文章 写文章
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 框架的应用案例。在实际开发中,文件上传和下载是非常常见的功能,巩固这些知识点对于提高开发效率和质量有非常大的作用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复