здесь проблема в aws лямбде, использующем node.js для создания пароля в скопированном PDF-файле.
const aws = require("aws-sdk");
const fs = require("fs");
const QPDF = require("node-qpdf");
const s3 = new aws.S3();
exports.handler = async (event) => {
const params = {
Bucket: "BucketName",
Key: "key"
};
const s3Object = await s3.getObject(params).promise();
fs.writeFileSync('/tmp/test.pdf', s3Object.Body.toString('base64'),{'encoding':'base64'});
var options = {
keyLength: 128,
password: 'abc123',
restrictions: {
print: 'low',
useAes: 'y'
}
}
QPDF.encrypt('/tmp/test.pdf',options,(err)=>{
if(err)console.log(err,err.stack);
});
fs.exists ( '/tmp/test.pdf', function (exists) {
console.log (exists);
const file = fs.readFileSync('/tmp/test.pdf');
console.log(file);
const params = {
Bucket: "BucketName",
Key: "test.pdf",
Body: file
};
s3.upload(params, (err,data) => {
if (err) console.log(err);
console.log(data);
});
});
};
это мой код!
я мог бы скопировать свой PDF-файл в S3 и успешно загрузите копию pdf-файла в S3.
Итак, следующий шаг, я хотел создать пароль в этом pdf-файле копии.
Поэтому я использовал здесь код,
var options = {
keyLength: 128,
password: 'abc123',
restrictions: {
print: 'low',
useAes: 'y'
}
}
QPDF.encrypt('/tmp/test.pdf',options,(err)=>{
if(err)console.log(err,err.stack);
});
но есть ошибка.
Response:
{
"errorType": "Error",
"errorMessage": "/bin/sh: qpdf: command not found\n",
"trace": [
"Error: /bin/sh: qpdf: command not found",
"",
" at Socket.<anonymous> (/opt/nodejs/node_modules/node-qpdf/index.js:124:17)",
" at Object.onceWrapper (events.js:300:26)",
" at Socket.emit (events.js:210:5)",
" at Socket.EventEmitter.emit (domain.js:476:20)",
" at addChunk (_stream_readable.js:308:12)",
" at readableAddChunk (_stream_readable.js:289:11)",
" at Socket.Readable.push (_stream_readable.js:223:10)",
" at Pipe.onStreamRead (internal/stream_base_commons.js:182:23)"
]
}
я установил npm qpdf и node-qpdf и проверил установленные npms.
в чем проблема?