使用 Amazon S3 触发器创建缩略图

环境

centos (注意,必须是Linux环境)

node12.x

安装教程

curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -

yum install -y nodejs yum install -y nodejs

​ 参考文档:https://blog.csdn.net/Z_Z_W_/article/details/104988833

教程

​ \1. 建立一个名为lambda-s3文件夹

\2. 建立index.js文件,保存该内容如下,由代码可以看出,桶都是我们手动建立的,并不是代码帮我们建的

// dependencies const AWS = require('aws-sdk'); const util = require('util'); const sharp = require('sharp'); // get reference to S3 client const s3 = new AWS.S3(); exports.handler = async (event, context, callback) => {   // Read options from the event parameter.  console.log("Reading options from event:\n", util.inspect(event, {depth: 5}));  const srcBucket = event.Records[0].s3.bucket.name;  // Object key may have spaces or unicode non-ASCII characters.  const srcKey    = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));  const dstBucket = srcBucket + "-resized";  const dstKey    = "resized-" + srcKey;   // Infer the image type from the file suffix.  const typeMatch = srcKey.match(/\.([^.]*)$/);  if (!typeMatch) {      console.log("Could not determine the image type.");      return;  }   // Check that the image type is supported    const imageType = typeMatch[1].toLowerCase();  if (imageType != "jpg" && imageType != "png") {      console.log(`Unsupported image type: ${imageType}`);      return;  }   // Download the image from the S3 source bucket.    try {      const params = {          Bucket: srcBucket,          Key: srcKey      };      var origimage = await s3.getObject(params).promise();   } catch (error) {      console.log(error);      return;  }     // set thumbnail width. Resize will set the height automatically to maintain aspect ratio.  const width  = 200;   // Use the sharp module to resize the image and save in a buffer.  try {       var buffer = await sharp(origimage.Body).resize(width).toBuffer();            } catch (error) {      console.log(error);      return;  }    // Upload the thumbnail image to the destination bucket  try {      const destparams = {          Bucket: dstBucket,          Key: dstKey,          Body: buffer,          ContentType: "image"      };       const putResult = await s3.putObject(destparams).promise();         } catch (error) {      console.log(error);      return;  }         console.log('Successfully resized ' + srcBucket + '/' + srcKey +      ' and uploaded to ' + dstBucket + '/' + dstKey);  };

\3. 使用非root用户在lambda-s3目录下安装sharp包,npm run sharp。注意:安装sharp包对版本严格限制

参考文档:https://sharp.pixelplumbing.com/install

安装好之后如下结构

​ \4. 在lambda下面打包成zip,将该zip文件download下来,命令sz,然后把这个zip文件上传至aws lambda服务的 lambda函数

​ zip -r function.zip . ,该压缩文件我会放在最下面,负责人只需要知道原理就行,如果遇到这个需求,将该压缩文件下载下来就行,免去以上所有步骤

​ \5. 首先我们需要在s3建立一个源公开桶名为 meross-userfiles-mobilehub-1868304105,然后建立一个缩略图桶 meross-userfiles-mobilehub-1868304105-resized。key的路径:如果你的key,都以public开头,那么对应缩略图桶的key路径是以resized-public开头,详细请看以上js代码

​ \6. 在按照https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/with-s3-tutorial.html 文档设置好权限之后,我们往 源桶的对应路径下面上传一个jpg文件,

​ 7.查看目标桶

​ 我们发现目标桶的缩略图自动创建成功

压缩文件下载:

https://note.youdao.com/ynoteshare/index.html?id=0f06dd6b5d62d75782c55b59f45a0d98&type=note&_time=1639794879376

参考文档

https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/with-s3-tutorial.html

https://blog.csdn.net/Z_Z_W_/article/details/104988833

https://sharp.pixelplumbing.com/install

使用 Amazon S3 触发器创建缩略图的更多相关文章

  1. Amazon S3 功能介绍

    一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...

  2. Hive中导入Amazon S3中的分区表数据的操作

    Hive中创建S3的外部表 数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图: 每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表 ...

  3. asp.net core系列 69 Amazon S3 资源文件上传示例

    一.  上传示例 Install-Package AWSSDK.S3 -Version 3.3.104.10 using Amazon; using Amazon.Runtime; using Ama ...

  4. Amazon S3 分布式存储的 python 接口实现

    Amazon s3 是一种分布式的对象存储.用键值对的方式,来存储数据.其中,存入的所有数据都是一个对象(object),每一个对象都有一个键(key)存在. 具有非常方便的 web 访问接口,以及权 ...

  5. 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖

    1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...

  6. cosbench read异常解决办法。 Unable to verify integrity of data download. Client calculated content hash didn't match hash calculated by Amazon S3. The data may be corrupt.

    问题:cosbench read测试failed 报错如下 Cosbench v0.4.2.c4 against Ceph (Hammer) / radosgw / HAproxy's HTTP en ...

  7. PHP 创建缩略图

    一.成比例缩小图像 <?php /* 创建缩略图 */ $file = __DIR__.'/button.png'; $scale = 0.5; // 比例 $image = ImageCrea ...

  8. php 使用GD库上传图片以及创建缩略图

    php 使用GD库上传图片以及创建缩略图   GD库是PHP进行图象操作一个很强大的库. 先在php.ini里增加一行引用:extension=php_gd2.dll 重启apache.做一个测试页 ...

  9. 使用GDI+轻松创建缩略图

    Gdi+ 还是相当好用的. 1> Image保存图像,需要一个CLSID的参数,它可以这样获得: int   GetEncoderClsid(const   WCHAR*   format,   ...

随机推荐

  1. [luogu4484]最长上升子序列

    标算是状压dp+打表,前者时间复杂度为$o(n^{2}2^{n})$,并通过打表做到$o(1)$ 参考loj2265中关于杨表的相关知识,不难发现答案即$\frac{\sum_{a\vdash n}a ...

  2. Gin 如何动态生成模型 swagger 文档

    在做 API 接口开发时, 一般会统一 API 返回格式, 例如 { "code": 200, "data": { //xxxxx //xxxxx }, &qu ...

  3. [Cnoi2020]线性生物

    期望入门题.但是我不会做. 考虑设\(E_{x\to{x+1}}\)为\(x\)到\(x+1\)点的期望步数. 则\(ans = \sum_{i = 0}^{n} E_{x\to{x+1}}\) 知\ ...

  4. Codeforces 575A - Fibonotci

    题面传送门 题意: 给出 \(s_0,s_1,s_2,\dots,s_{n-1}\),对于 \(i\geq n\),有 \(m\) 个 \(s_i\) 满足 \(s_i\neq s_{i\bmod n ...

  5. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  6. 学军中学csp-noip2020模拟5

    Problem List(其实这几场全是附中出的) 这场比赛的题目相当有价值,特别是前两题,相当的巧妙. A.路径二进制 数据范围这么小,当然是搜索. \(30pts:\)大力搜索出奇迹,最后统计答案 ...

  7. Go知识点大纲

    目录 1. 基本介绍 2. 安装及配置 3. 变量 4. 常量 5. 数据类型 5.1 numeric(数字) 5.2 string(字符串) 5.3 array(数组) 5.4 slice(切片) ...

  8. SourceTree使用图解-转

    这篇文档的目的是:让使用Git更轻松. 看完这篇文档你能做到的是: 1.简单的用Git管理项目. 2.怎样既要开发又要处理发布出去的版本bug情况. SourceTree是一个免费的Git图形化管理工 ...

  9. LR SP PC

    LR SP PC 深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益. 1.堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种 ...

  10. X-MagicBox-820的luatOS之路连载系列6

    继上次用Qt实现了显示地图和MQTT通信之后(X-MagicBox-820的luatOS之路连载系列5),说是要研究下地图的开放接口,也看了标记点和线的方法(地图上自定义标记点和轨迹线的实现).这次就 ...