【问题标题】:Uploading image to s3 using aws sdk使用 aws sdk 将图像上传到 s3
【发布时间】:2018-11-21 10:10:45
【问题描述】:

我目前正在使用 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

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda


    【解决方案1】:

    很遗憾,我对 JS 不是很精通,但我会给你我在 Python 中使用的方法将图像上传到 S3。

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

    图像可以表示为可以保存到 S3 的 base64 编码字符串。使用SDK,操作成功后会收到上传地址,也可以自己生成(很简单,网上有很多教程)。

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

    【讨论】:

    • 我还想我需要直接使用我的前端(Vue/Nuxt)将图像直接上传到 s3,因为我无法使用 Api Gateway 传递图像。感谢您的想法
    猜你喜欢
    • 2015-04-18
    • 2016-01-30
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-08-15
    • 2017-01-10
    相关资源
    最近更新 更多