java 文件流下载和预览
主要运用 Content-Disposition
header 设置
@RestController
public class FileController {
@GetMapping("/download")
public void preview(HttpServletResponse response, boolean online) throws Exception {
ServletOutputStream outputStream = response.getOutputStream();
byte[] bytes = new byte[1024];
File file = new File("F:\\cc.pdf");
String fileName = URLEncoder.encode(file.getName(), "UTF-8").replaceAll("\\+", "%20");
if (online) {
//预览
//1.设置具体的content-type,如 pdf
//2.设置 Content-Disposition: inline;filename=test.pdf
response.setContentType(MediaType.APPLICATION_PDF_VALUE);
response.setHeader("Content-Disposition", "inline; filename=" + fileName);
} else {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
}
FileInputStream fis = new FileInputStream(file);
int len;
while ((len = fis.read(bytes)) != -1) {
outputStream.write(bytes, 0, len);
}
fis.close();
outputStream.flush();
}
}