Ich benutze pdfkit und kann erfolgreich ein pdf zu S3 einmal hochladen. Aber wenn es ein zweites Mal versucht wird, löst es diesen Fehler aus.Fehler: Schreiben Sie nach dem Ende mit pdfkit
Error: write after end
at writeAfterEnd (_stream_writable.js:220:12)
at PDFReference.Writable.write (_stream_writable.js:271:5)
at PDFPage.write (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/page.js:95:27)
at PDFDocument.addContent (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/document.js:161:17)
at PDFDocument.save (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/mixins/vector.js:19:19)
at PDFDocument._fragment (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/mixins/text.js:257:12)
at PDFDocument._line (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/mixins/text.js:203:12)
at emitThree (events.js:140:20)
at LineWrapper.emit (events.js:216:7)
at /Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/line_wrapper.js:141:17
at LineWrapper.wrap (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/line_wrapper.js:207:9)
at PDFDocument._text (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/mixins/text.js:48:17)
at PDFDocument.text (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/pdfkit/js/mixins/text.js:59:19)
at /Users/jonathancorrin/Desktop/workspace/rent-app/server/routes/image-upload.js:36:6
at Layer.handle [as handle_request] (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/layer.js:95:5)
at /Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:335:12)
at next (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:275:10)
at Function.handle (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:174:3)
at router (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:47:12)
at Layer.handle [as handle_request] (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:317:13)
at /Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:335:12)
at next (/Users/jonathancorrin/Desktop/workspace/rent-app/node_modules/express/lib/router/index.js:275:10)
Ich bin mir nicht sicher, was diesen Fehler verursacht. Hier ist mein Code server
var express = require('express');
var router = express.Router();
var aws = require('aws-sdk');
var fs = require('fs');
var path = require('path');
var path3 = path.join(__dirname, "../config/config-aws.json");
var pdf = require('pdfkit');
var multer = require('multer');
var multerS3 = require('multer-s3');
var doc = new pdf;
aws.config.loadFromPath(path3);
var s3 = new aws.S3();
var fileName = '';
var uploadM = multer({
storage: multerS3({
s3: s3,
bucket: 'XXXX',
acl: 'public-read',
metadata: function (req, file, cb) {
cb(null, {fieldName: file.fieldname});
},
key: function (req, file, cb) {
fileName = Date.now().toString() + "-" + (Math.round(Math.random() * 10000000000000000)).toString() + '-' + file.originalname;
cb(null, fileName)
}
})
});
router.post('/upload/contract', function (req,res) {
doc.fontSize(21)
.text(req.body.contractType, 240, 50);
doc.fontSize(15)
.text(req.body.text, 100, 100)
.text(req.body.text2, 100, 280);
doc.end();
var params = {
Key: req.body.fileName,
Body: doc,
Bucket: 'XXXX',
ACL: 'public-read',
contentType: 'application/pdf'
};
s3.upload(params, function (err, response) {
if (err) {
return res.status(400).json({
message: "Error uploading pdf",
error: err.stack
});
}
return res.status(200).json({
title: "PDF uploaded successfully",
obj: response
});
});
});
es etwas mit doc.end zu tun hat() aber ich bin nicht sicher, was genau. Hier ist mein Client-Code, der die Anfrage stellt.
onReturnPDF(html: string, fileName: string, contractType: string, html2: string) {
const body = {
fileName: fileName,
text: html,
contractType: contractType,
text2: html2
};
return this.http.post(this.devUrl + '/upload/contract', body)
.shareReplay()
}
Wer weiß, wie ich das beheben kann?
Ihr Dokument ist global, ich glaube nicht, dass Sie es nach dem Anruf beenden können. Versuchen Sie, ein neues PDF in Ihrem Handler zu haben. – T4rk1n