使用AWS SDK上传图片至S3

3

我目前正在使用AWS服务来创建用户配置文件。

基本上,我已经可以添加用户详细信息,例如(姓名、性别、兴趣)。

我使用API Gateway接受我使用PostMan发送的参数,然后API网关POST方法将请求发送到AWS Lambda,然后我使用aws sdk将数据插入Dynamodb

我想要的是上传用户图片,文件将保存到s3,然后我将把来自s3的url与其他用户详细信息一起存储到dynamodb中。

我的当前lambda代码如下:

const AWS =  require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'XXXXXX', apiVersion: 'XXX'});
const uuidv4 = require('uuid/v4');

exports.handler = function(event, context, callback) {
  const params = {
    Item: {
      'uuid': {  S: "i_" + uuidv4() }, 
      'profileImage': { S: event.profileImage },
      'name': { S: event.name }
     }, 
     TableName: 'users'
   };

   dynamodb.putItem(params, function(err, data) {
    const response = {
        status: 200, 
        message: JSON.stringify('A record has been created')
    };
    if (err) {
        console.log(err);
        callback(err);
    } else {
        console.log(data);
        callback(null, response);
    }
  });
};

我该如何使用我提到的服务进行程序化图像上传。 我在网上找到的文章仅涉及上传单个图片,而不是通过Api Gateway上传。

1个回答

1

很遗憾,我对JS不是很熟练,但是我会告诉你我在Python中上传图片到S3的方法。

由于无法通过API网关传递整个对象(如图像、zip文件等),因此必须将其包含在POST的有效负载中。

图像可以表示为base64编码的字符串,您可以将其保存到S3。使用SDK,操作成功后,您将收到上传地址,或者您可以自己生成(这很简单,在互联网上有很多指南)。

由于S3中的图像默认只是一个base64编码的字符串,因此您需要指定要上传到S3的对象的类型(Content-Type头),以便稍后可以打开图像(例如在浏览器中)。


我也在考虑使用我的前端Vue/Nuxt直接上传图像到s3,因为我无法通过Api Gateway传递图像。感谢您的想法。 - AllenC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接