Javascript 创建lambda函数以生成PDF文件缩略图
我一直在尝试创建一个AWS节点lambda函数,从S3下载一个PDF文件,为该文件的第一页生成一个缩略图,然后将该缩略图上传回S3。由于我不是专家,我试图从AWS提供的Lambda示例中启发自己调整图像大小,以及node.js中的PDF缩略图生成器,但未能使其正常工作。 从S3下载正常,上传回S3正常,但缩略图生成失败。 请参见下面的我的代码:Javascript 创建lambda函数以生成PDF文件缩略图,javascript,amazon-web-services,pdf,amazon-s3,aws-lambda,Javascript,Amazon Web Services,Pdf,Amazon S3,Aws Lambda,我一直在尝试创建一个AWS节点lambda函数,从S3下载一个PDF文件,为该文件的第一页生成一个缩略图,然后将该缩略图上传回S3。由于我不是专家,我试图从AWS提供的Lambda示例中启发自己调整图像大小,以及node.js中的PDF缩略图生成器,但未能使其正常工作。 从S3下载正常,上传回S3正常,但缩略图生成失败。 请参见下面的我的代码: //从S3下载pdf,创建缩略图,然后上传到缓存。 异步瀑布([ 功能下载(下一步){ //将pdf从S3下载到缓冲区中。 s3.getObject(
//从S3下载pdf,创建缩略图,然后上传到缓存。
异步瀑布([
功能下载(下一步){
//将pdf从S3下载到缓冲区中。
s3.getObject({
桶:桶,
关键字:pdfkey
},
其次);
},
函数缩略图(响应,下一步){
gm(response.Body[0]).size(函数(err,size){
//在内存中转换图像缓冲区。
this.resize(requestedwidth,requestedheight).toBuffer(format.toUpperCase(),函数(err,buffer){
如果(错误){
console.log('生成缩略图失败');
下一个(错误);
}否则{
接下来(null,response.ContentType,buffer);
}
});
});
},
函数上载(contentType、data、next){
//流化缩略图
s3.1对象({
桶:桶,
键:指钉键,
ACL:“公共读取”,
正文:数据,
ContentType:ContentType
},
其次);
}
],函数(err){
如果(错误){
context.fail(新错误(
'无法为'+BUCKET+'/'+pdfkey'创建缩略图+
'并上传到'+BUCKET+'/'+thumbnailkey'+
'由于错误:'+错误
));
}否则{
成功(
'已成功调整'+BUCKET+'/'+pdfkey'的大小+
'并上载到“+BUCKET+”/“+thumbnailkey”
);
}
}
);代码>以下是最终有效的代码。使用节点模块中的以下4个LIB编写以下代码:
- 异步的
- 通用汽车
- mktemp
- pdf图像
:
你搞清楚了吗?希望做同样的事情。干杯
var async = require('async');
var AWS = require('aws-sdk');
var gm = require('gm').subClass({ imageMagick: true }); // Enable ImageMagick integration.
var util = require('util');
var fs = require('fs');
var mktemp = require("mktemp");
var BUCKET = "XXXXXXXXXX";
var s3 = new AWS.S3();
exports.handler = function(event, context) {
var pdfkey = decodeURIComponent(event.pdfkey.replace(/\+/g, " "));
var thumbnailkey = decodeURIComponent(event.thumbnailkey.replace(/\+/g, " "));
var requestedwidth = event.width;
var requestedheight = event.height;
var shape = event.shape;
var format = event.format;
// Infer the pdf type.
var typeMatch = pdfkey.match(/\.([^.]*)$/);
if (!typeMatch) {
context.fail(new Error('unable to infer pdf type for key ' + pdfkey));
return;
}
var fileType = typeMatch[1];
if (fileType != "pdf") {
context.fail(new Error('skipping non-pdf ' + pdfkey));
return;
}
// Download the pdf from S3, create thumbnail, and upload to cache.
async.waterfall([
function download(next) {
// Download the pdf from S3 into a buffer.
s3.getObject({
Bucket: BUCKET,
Key: pdfkey
},
next);
},
function thumbnail(response, next) {
console.log('generating thumbnail');
var temp_file, image;
temp_file = mktemp.createFileSync("/tmp/XXXXXXXXXX.pdf");
fs.writeFileSync(temp_file, response.Body);
image = gm(temp_file + "[0]").flatten().colorspace("CMYK");
image.size(function(err, size) {
if ((requestedwidth > 0) && (requestedheight > 0))
{
if (shape == "pad")
{
// Transform the image buffer in memory.
this.resize(requestedwidth, requestedheight).gravity('Center').background('transparent').extent(requestedwidth, requestedheight)
.toBuffer(format.toUpperCase(), function(err, buffer) {
if (err) {
next(err);
} else {
next(null, response.ContentType, buffer);
}
});
}
else
{
// Transform the image buffer in memory.
this.resize(requestedwidth, requestedheight)
.toBuffer(format.toUpperCase(), function(err, buffer) {
if (err) {
next(err);
} else {
next(null, response.ContentType, buffer);
}
});
}
}
else
{
if (requestedwidth > 0)
{
// Transform the image buffer in memory.
this.resize(requestedwidth)
.toBuffer(format.toUpperCase(), function(err, buffer) {
if (err) {
next(err);
} else {
next(null, response.ContentType, buffer);
}
});
}
else
{
// Transform the image buffer in memory.
this.resize(null, requestedheight)
.toBuffer(format.toUpperCase(), function(err, buffer) {
if (err) {
next(err);
} else {
next(null, response.ContentType, buffer);
}
});
}
}
});
},
function upload(contentType, data, next) {
// Stream the thumbnail
console.log('uploading thumbnail');
s3.putObject({
Bucket: BUCKET,
Key: thumbnailkey,
ACL:"public-read",
Body: data,
ContentType: "image/" + format
},
next);
}
], function (err) {
if (err) {
context.fail(new Error(
'Unable to create thumbnail for ' + BUCKET + '/' + pdfkey +
' and upload to ' + BUCKET + '/' + thumbnailkey +
' due to an error: ' + err
));
} else {
context.succeed(
'Successfully resized ' + BUCKET + '/' + pdfkey +
' and uploaded to ' + BUCKET + '/' + thumbnailkey
);
}
}
);
};