java 返回 pdf 文件流给前端,流在response 里面,content-type 为 pdf
时间: 2023-11-09 18:24:44 浏览: 948
在Java中,返回PDF文件流给前端可以通过以下代码实现:
```java
// 读取PDF文件到字节数组
File file = new File("path/to/pdf/file.pdf");
byte[] pdfBytes = Files.readAllBytes(file.toPath());
// 设置response的content-type为pdf
response.setContentType("application/pdf");
// 设置response的header参数,使浏览器弹出下载框
response.setHeader("Content-disposition", "attachment;filename=file.pdf");
// 将PDF字节数组写入response输出流
response.getOutputStream().write(pdfBytes);
response.getOutputStream().flush();
```
以上代码将读取指定路径下的PDF文件到字节数组中,然后设置response的content-type为pdf,接着设置Content-disposition header参数,使浏览器弹出下载框,最后将PDF字节数组写入response输出流中,返回给前端。
相关问题
后端返回文件流给前端 PDF文件
可以在后端使用一些库或工具来生成 PDF 文件,例如 iText 或 Apache PDFBox。在生成完毕后,可以将生成的 PDF 文件以二进制流的形式返回给前端。
以下是一个使用 Spring Boot 框架返回 PDF 文件流的示例代码:
```java
@GetMapping("/download-pdf")
public ResponseEntity<ByteArrayResource> downloadPDF() throws IOException {
// 生成 PDF 文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph("Hello, World!"));
document.close();
// 将 PDF 文件以二进制流的形式返回给前端
ByteArrayResource resource = new ByteArrayResource(baos.toByteArray());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=myfile.pdf")
.contentType(MediaType.APPLICATION_PDF)
.contentLength(resource.contentLength())
.body(resource);
}
```
这个示例代码会生成一个包含 "Hello, World!" 文本的 PDF 文件,并将其以二进制流的形式返回给前端。前端可以通过调用这个接口来下载 PDF 文件。
java如何给前端返回pdf文件, 前端如何下载
要给前端返回 PDF 文件,可以使用 Java 中的 HttpServletResponse 对象来实现,具体步骤如下:
1. 设置响应头,告诉浏览器返回的是一个文件,而非普通的 HTML 页面:
```java
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=example.pdf");
```
2. 获取 PDF 文件的输入流,可以从本地文件系统或者数据库中读取:
```java
File file = new File("example.pdf");
InputStream inputStream = new FileInputStream(file);
```
3. 将输入流的内容写入响应输出流中:
```java
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
outputStream.flush();
outputStream.close();
inputStream.close();
```
至于如何在前端进行下载,可以在页面上添加一个下载按钮,点击后通过 JavaScript 代码发起下载请求。具体实现方法可以参考以下代码:
```javascript
let xhr = new XMLHttpRequest();
xhr.open('GET', '/download/pdf', true);
xhr.responseType = 'blob';
xhr.onload = function () {
if (this.status === 200) {
let blob = this.response;
let a = document.createElement("a");
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "example.pdf";
a.click();
window.URL.revokeObjectURL(url);
}
};
xhr.send();
```
以上代码中,我们通过 AJAX 发送 GET 请求,将响应类型设置为 blob,然后在 onload 回调函数中创建一个 a 标签,设置 href 属性为下载链接,download 属性为文件名,最后通过 a.click() 来触发下载。
阅读全文