Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs

Trong ứng dụng Node/Express của tôi, tôi có mã sau, giả sử đọc tài liệu PDF từ tệp và gửi nó đến trình duyệt:

var file = fs.createReadStream('./public/modules/datacollectors/output.pdf', 'binary');
var stat = fs.statSync('./public/modules/datacollectors/output.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf');
res.pipe(file, 'binary');
res.end(); 

Tôi không nhận được bất kỳ lỗi nào, nhưng tôi cũng không nhận được tệp trong trình duyệt của mình. Tôi đang làm gì sai?

Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs

LaggingReflex

31.2K33 Huy hiệu vàng133 Huy hiệu bạc188 Huy hiệu đồng33 gold badges133 silver badges188 bronze badges

Đã hỏi ngày 28 tháng 6 năm 2015 lúc 23:26Jun 28, 2015 at 23:26

Eugene Goldbergeugene GoldbergEugene Goldberg

13.3K19 Huy hiệu vàng87 Huy hiệu bạc160 Huy hiệu đồng19 gold badges87 silver badges160 bronze badges

1

Bạn phải đi từ luồng có thể đọc được đến luồng có thể ghi chứ không phải theo cách khác:

var file = fs.createReadStream('./public/modules/datacollectors/output.pdf');
var stat = fs.statSync('./public/modules/datacollectors/output.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=quote.pdf');
file.pipe(res);

Ngoài ra, bạn đang thiết lập mã hóa sai, chuyển một đối tượng với mã hóa nếu cần.

Đã trả lời ngày 29 tháng 6 năm 2015 lúc 0:12Jun 29, 2015 at 0:12

Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs

4

Tôi nghĩ rằng tôi đã tìm thấy câu trả lời của bạn trong một tệp PDF hiển thị bài đăng khác trong trình duyệt bằng Node JS.

Sau khi kiểm tra mã của bạn trong Chrome, nó ngay lập tức bắt đầu tải xuống tệp PDF. Nhưng nếu bạn muốn hiển thị nội dung của tệp PDF, bạn có thể thử bên dưới:

var data =fs.readFileSync('./public/modules/datacollectors/output.pdf');
res.contentType("application/pdf");
res.send(data);

Điều này nên trực tiếp gửi nội dung PDF vào trình duyệt.

Hy vọng điều này trả lời câu hỏi của bạn.

Đã trả lời ngày 16 tháng 7 năm 2017 lúc 20:04Jul 16, 2017 at 20:04

Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs

0

Đây là cách dễ nhất:

app.get('/', (req, res) => res.download('./file.pdf'))

Nếu điều này cho bạn rắc rối. Kiểm tra phiên bản Express.js hoặc bất kỳ phần giữa nào có thể cần thiết.

Chúc mừng

Đã trả lời ngày 13 tháng 4 năm 2020 lúc 15:02Apr 13, 2020 at 15:02

Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs

1

Cách tốt nhất để tải xuống PDF trong cuộc gọi API REST.

var path = require('path');     
var file = path.join(__dirname, 'file.pdf');    
res.download(file, function (err) {
       if (err) {
           console.log("Error");
           console.log(err);
       } else {
           console.log("Success");
       }    
});

Đã trả lời ngày 19 tháng 3 năm 2018 lúc 7:39Mar 19, 2018 at 7:39

Nếu bạn đang sử dụng Swagger/Openapi thì bạn có thể xem phần phản hồi của mã bên dưới. /api/pdf_from_html: post: tags: - PDF description: Create PDF from html produces: - application/pdf consumes: - application/json parameters: - name: contents description: HTML content to convert to pdf in: body required: true schema: $ref: "#/definitions/pdf" responses: 200: description: Returns a PDF encoded in base64 content: application/pdf: schema: type: string format: base64

Đã trả lời ngày 1 tháng 12 năm 2019 lúc 1:05Dec 1, 2019 at 1:05

Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs

Tôi đoán thật đơn giản nếu bạn muốn hiển thị nó trong tiêu đề xử lý nội dung thay đổi trình duyệt thành "nội tuyến" thay vì "tệp đính kèm; fileName = quote.pdf" Inline hiển thị trực tiếp trong trình duyệt thay vì tải xuống, nó hoạt động tốt cho tôi

Đã trả lời ngày 8 tháng 3 lúc 11:53Mar 8 at 11:53

Hướng dẫn response pdf file nodejs - phản hồi tệp pdf nodejs