স্প্রিং 3.0 এর সাথে আপনি HttpEntity
রিটার্ন অবজেক্টটি ব্যবহার করতে পারেন। আপনি যদি এটি ব্যবহার করেন, তবে আপনার নিয়ামকের কোনও কোনও HttpServletResponse
জিনিসের প্রয়োজন নেই এবং তাই এটি পরীক্ষা করা সহজ।
এটি বাদে, এই উত্তরটি ইনফিলিগোর সাথে সমান ।
যদি আপনার পিডিএফ ফ্রেমওয়ার্কের রিটার্ন মান একটি বাইট অ্যারে হয় (অন্যান্য রিটার্ন মানগুলির জন্য আমার উত্তরের দ্বিতীয় অংশটি পড়ুন) :
@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);
}
যদি আপনার পিডিএফ ফ্রেমওয়ার্ক ( documentBbody
) এর রিটার্ন টাইপ ইতিমধ্যে বাইট অ্যারে না হয় (এবং নাওByteArrayInputStream
) তবে প্রথমে এটিকে বাইট অ্যারে না বানাই বুদ্ধিমানের কাজ হবে । পরিবর্তে এটি ব্যবহার করা ভাল:
উদাহরণস্বরূপ 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);
}