if(file.exists()){//如果存在则使用 ResponseEntity 类构造一个包含文件内容的响应体,并设置 Content-Disposition 头部为 attachment,表示本次响应体是一个附件,浏览器会自动下载该文件 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", fileName); //返回 ResponseEntity 实例作为接口的响应 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED); }
时间: 2023-06-27 14:07:32 浏览: 115
这段代码的作用是判断文件是否存在,如果存在则使用 ResponseEntity 类构造一个包含文件内容的响应体,并设置 Content-Disposition 头部为 attachment,表示本次响应体是一个附件,浏览器会自动下载该文件。
具体来说,代码中首先创建了一个 HttpHeaders 对象,并设置了其 Content-Type 和 Content-Disposition 头部信息。然后使用 FileUtils 类的 readFileToByteArray() 方法读取文件内容,并将其作为字节数组传递给 ResponseEntity 的构造函数,构造出一个包含文件内容的响应体。最后返回该 ResponseEntity 实例作为接口的响应。
需要注意的是,该代码块中的 HttpStatus.CREATED 表示请求已经成功处理,但是没有返回任何响应体。这是因为响应体已经被封装在了 ResponseEntity 中。
相关问题
spring boot写一个文件下载上传的实例具体代码实现
好的,以下是一个简单的 Spring Boot 文件上传和下载实现的代码示例:
首先,创建一个上传文件的表单页面 upload.html:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form method="POST" enctype="multipart/form-data" action="/upload">
选择文件:<input type="file" name="file"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
```
然后,编写一个控制器类 FileController,实现文件上传和下载的逻辑:
```java
@RestController
public class FileController {
// 上传文件
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
// 获取上传文件的原始文件名
String fileName = file.getOriginalFilename();
// 保存文件到本地磁盘
file.transferTo(new File("D:/upload/" + fileName));
return "上传成功!";
}
// 下载文件
@GetMapping("/download/{fileName}")
public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
// 构造文件对象
File file = new File("D:/upload/" + fileName);
if(!file.exists()) {
return ResponseEntity.notFound().build();
}
// 构造文件下载响应体
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<>(Files.readAllBytes(file.toPath()), headers, HttpStatus.OK);
}
}
```
在上述代码中,`@PostMapping("/upload")` 注解表示该方法处理 HTTP POST 请求,并映射到 "/upload" 路径;`@RequestParam("file")` 注解表示获取上传的文件参数;`@GetMapping("/download/{fileName}")` 注解表示该方法处理 HTTP GET 请求,并映射到 "/download/{fileName}" 路径,其中的 `{fileName}` 表示动态的文件名参数。
在上传文件的方法中,我们首先获取上传文件的原始文件名,然后将文件保存到本地磁盘。在下载文件的方法中,我们先判断文件是否存在,如果不存在则返回 404 错误;如果存在则构造文件下载响应体,设置响应头信息,然后将文件内容写入到响应体中。
最后,在应用启动类中添加配置:
```java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// 配置静态资源目录
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/upload/");
}
}
}
```
在上述代码中,我们通过 `addResourceHandlers()` 方法配置静态资源目录,将 "/upload/**" 路径映射到本地磁盘上的 "D:/upload/" 目录下。这样,在访问上传的文件时,就可以通过 "/upload/{fileName}" 路径来访问了。
阅读全文