java controller 怎么返回文件流和一些其他信息
时间: 2024-04-09 17:33:07 浏览: 257
在 Java 的控制器(Controller)中,可以使用 `ResponseEntity` 来返回文件流和其他信息。下面是一个示例代码:
```java
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/download")
public ResponseEntity<Object> downloadFile() throws IOException {
// 从文件系统中读取要下载的文件
File file = new File("path/to/file.pdf");
FileInputStream inputStream = new FileInputStream(file);
// 创建文件资源
InputStreamResource resource = new InputStreamResource(inputStream);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
headers.add(HttpHeaders.CONTENT_LENGTH, String.valueOf(file.length()));
// 返回 ResponseEntity
return ResponseEntity.ok()
.headers(headers)
.body(resource);
}
// 其他控制器方法...
}
```
在上述示例中,`downloadFile` 方法用于返回文件流和其他信息。创建一个 `InputStreamResource` 对象来封装文件输入流,并设置好响应头,然后使用 `ResponseEntity` 返回该资源对象。你可以根据需要修改文件路径、文件名、响应头等内容来适应你的实际需求。
阅读全文