Java

java responseentity能返回文件流吗

小樊
140
2024-12-03 12:22:18
栏目: 编程语言

是的,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 ResponseEntity<InputStreamResource> downloadFile(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对象。

0
看了该问题的人还看了