Với Spring 3.0, bạn có thể sử dụng HttpEntity
đối tượng trả về. Nếu bạn sử dụng cái này, thì bộ điều khiển của bạn không cần một HttpServletResponse
đối tượng, và do đó sẽ dễ kiểm tra hơn.
Ngoại trừ điều này, câu trả lời này tương đối giống với câu trả lời của Infeligo .
Nếu giá trị trả về của khung pdf của bạn là một mảng byte (đọc phần thứ hai trong câu trả lời của tôi cho các giá trị trả về khác) :
@RequestMapping(value = "/files/{fileName}", method = RequestMethod.GET)
public HttpEntity<byte[]> createPdf(
@PathVariable("fileName") String fileName) throws IOException {
byte[] documentBody = this.pdfFramework.createPdf(filename);
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_PDF);
header.set(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=" + fileName.replace(" ", "_"));
header.setContentLength(documentBody.length);
return new HttpEntity<byte[]>(documentBody, header);
}
Nếu kiểu trả về của Khung PDF ( documentBbody
) của bạn chưa phải là một mảng byte (và cũng không có ByteArrayInputStream
) thì bạn nên KHÔNG làm cho nó thành một mảng byte trước. Thay vào đó, tốt hơn là sử dụng:
ví dụ với FileSystemResource
:
@RequestMapping(value = "/files/{fileName}", method = RequestMethod.GET)
public HttpEntity<byte[]> createPdf(
@PathVariable("fileName") String fileName) throws IOException {
File document = this.pdfFramework.createPdf(filename);
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_PDF);
header.set(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=" + fileName.replace(" ", "_"));
header.setContentLength(document.length());
return new HttpEntity<byte[]>(new FileSystemResource(document),
header);
}