簡體   English   中英

使用nodejs從lambda觸發器調整S3存儲桶中的圖像大小

[英]Resizing the image in S3 bucket from lambda trigger using nodejs

我是 nodejs 和 aws 的新手,誰能指出以下代碼有什么問題來調整 s3 存儲桶中的圖像大小

程序如下

 'use strict';
 const AWS = require('aws-sdk');
 const S3 = new AWS.S3({
 accessKeyId: "xxxxxxxxxxxx",
 secretAccessKey: "yyyyyyyyyyy", 
 region: "us-east-1", 
 signatureVersion: 'v4',
 });

const Sharp = require('sharp');
const BUCKET = "patientimg"; 
const URL = "https://s3.ap-south-1.amazonaws.com";
exports.handler = function(event, context, callback) {
const key = event.queryStringParameters.key;
const match = key.match(/(\d+)x(\d+)\/(.*)/);
const width = parseInt(match[1], 10);
const height = parseInt(match[2], 10);
const originalKey = match[3];

S3.getObject({Bucket: BUCKET, Key: originalKey}).promise()
.then(data => Sharp(data.Body)
  .resize(width, height)
  .toFormat('png')
  .toBuffer()
)
.then(buffer => S3.putObject({
    Body: buffer,
    Bucket: BUCKET,
    ContentType: "image/png",
    Key: key,
  }).promise()
)
.then(() => callback(null, {
    statusCode: '301',
    headers: {'location': "${URL}/${key}"},
    body: "",
  })
)
.catch(err => callback(err))
}

這是我正在使用的確切代碼,使用“S3 put”請求進行測試時從 lambda 輸出

  {
   "errorMessage": "RequestId: edaddaf7-4c5e-11e7-bed8-13f72aaa5d38 Process exited before completing request"
    }

提前致謝

使用 lambda 調整圖像大小是一個經典示例,AWS 團隊對此進行了很好的解釋。 聽從他們的指示,而不是別的。

https://aws.amazon.com/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/

正確的調整大小代碼是: http : //github.com/awslabs/serverless-image-resizing 無論您發現什么,都可能是錯誤的。

基本上它是這樣工作的:

  • 將此代碼上傳為您的 lambda。
  • 轉到 lambda 的觸發器選項卡並復制 URL
  • 轉到您的 s3 存儲桶並設置重定向規則:在 404 上,重定向到 lambda URL。 圖像將在請求時自動調整大小。

所有這些步驟都在上面的 AWS 博客中有詳細記錄。 他們的方法的好處是在實際需要之前不會創建調整大小的圖像,從而節省資源。

您可以使用此AWS Lambda 圖像調整器

它是使用 Node.js 構建的,並帶有構建您自己的設置的選項。 您只需要按照此處步驟操作即可

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM