是的,Java的ResponseEntity可以返回文件流。你可以使用HttpHeaders
来设置响应头,然后使用InputStreamResource
来包装文件流,最后将InputStreamResource
作为参数传递给ResponseEntity
的构造函数。以下是一个简单的示例:
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @RestController public class FileDownloadController { @GetMapping("/download") public ResponseEntitydownloadFile(HttpServletRequest request) throws IOException { // 设置文件路径 String filePath = "/path/to/your/file.txt"; File file = new File(filePath); // 检查文件是否存在 if (!file.exists()) { return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", new String(file.getName().getBytes("UTF-8"), "ISO-8859-1")); // 创建文件输入流 InputStream inputStream = new FileInputStream(file); // 使用InputStreamResource包装文件输入流 InputStreamResource resource = new InputStreamResource(inputStream); // 返回ResponseEntity return ResponseEntity.status(HttpStatus.OK).headers(headers).body(resource); } }
在这个示例中,我们创建了一个名为FileDownloadController
的控制器,其中有一个名为downloadFile
的方法。这个方法接收一个HttpServletRequest
参数,用于获取请求信息。我们首先设置文件路径,然后检查文件是否存在。接下来,我们设置响应头,包括内容类型和内容处置表单数据。然后,我们创建一个文件输入流,并使用InputStreamResource
将其包装起来。最后,我们返回一个包含文件输入流的ResponseEntity
对象。