【问题标题】:How can I upload the image to AWS S3如何将图像上传到 AWS S3
【发布时间】:2018-05-12 03:51:30
【问题描述】:

pin.js

function uploadPinMedia(req, res, next) {

    var s3 = new AWS.S3({
        accessKeyId: 'AKIAIUCBE3TQGL6ATPBA',
        secretAccessKey: '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',
        Bucket: 'mapery-v2'
    });

    var data = {
        Bucket: 'mapery-v2',
        Key: 'upload-v2',
        Body: req.files.pin_img
    };

    s3.putObject(data, function(err, media_res) {
        if(err) 
            console.log('error uploading data', media_res);
        console.log(media_res);
    });
    
}
我正在尝试从邮递员将图像上传到 s3 存储桶,但它似乎是我传递的表单数据req.files.pin_img 不正确。我哪里错了??

【问题讨论】:

  • 确保您删除了您的秘密 id + 密钥 ;)

标签: node.js postman


【解决方案1】:

以下对我有用。确保你有正确的配置。桶。你会发现使用https://appname.s3-accelerate.amazonaws.com/aws_test.jpg上传的图片

const AWS = require('aws-sdk');
AWS.config.update({
        accessKeyId: process.env.AWS_KeyId,
        secretAccessKey: process.env.AWS_secret,
        // region:process.env.AWS_region  
});

const s3 = new AWS.S3({   signatureVersion: 'v4',  })
var photoBucket = new AWS.S3({
    params: {
        Bucket: 'bucket'
    }
})
photoBucket.upload({
        ACL: 'public-read', 
        Body: fs.createReadStream('./test.jpg'), 
        // file upload by below name
        Key: 'aws_test.jpg',
        ContentType: 'application/octet-stream' // force download if it's accessed as a top location
},(err, response)=>{
    console.log(err, response)
});

【讨论】:

  • 感谢您的回复。如何通过邮递员发布图片??
  • 在邮递员中选择body>form-data,输入键名并选择类型文件表单下拉
  • 如何在我的帖子 API 中访问该文件
  • photoBucket.upload({ ACL: 'public-read', Body: fs.createReadStream(req.pin_img), Key: 'upload-v2', ContentType: 'application/octet-stream' }, (err, response)=>{ console.log(err, response) });
  • 是的,它有你可以在图像中看到的文件。但是,我仍然没有得到回应。
【解决方案2】:

我正在使用 nodejs 中的 Promise 从另一个 lambda 函数触发/调用上传到 S3 Bucket Lambda 函数。

注意:- 要从源调用目标 lambda,我们需要创建一个 调用策略 [Under IAM->Policy] 并将其附加到 Lambda 角色。

async function uploadToS3 (indexName){
await new Promise((resolve, reject) => {

        console.log(" Uploading to S3 ");
        
        //Lambda Parameter
        let lambda_params = {
            FunctionName: 'Library_Update_S3_Bucket', // Invoke lambda function 
         
            InvocationType: 'RequestResponse',
            LogType: 'Tail',
            Payload : JSON.stringify( { name : "ElasticsearchConfig.json", Body : 
               {"tableName" : "documents" , indexName } })
            };
         
         const lambdaS3Result = lambda.invoke(lambda_params ,  function(err, results) 
          {
            if (err) {
              console.log("Upload Failed :- ",err.message);
             response = {
                statusCode: 500,
                body: {message:"Upload to S3 Failed"}
                }
              
              reject(err);
            }
            else{
                console.log("Uploaded Successfully to S3");
                console.log("Results is :", results.Payload.statusCode )
                 response = {
                    statusCode: 200,
                    body: {message:"Done Uploading to S3"}
                    }
                    
                resolve(results);
            }
         });

  });
  }

Lambda 函数名称:- Library_Update_S3_Bucket

let response = {};

exports.handler = async (event) => {
// TODO implement

var params = {Bucket : 'pe-library', Key: event.name, Body: 
JSON.stringify(event.Body), ContentType: "application/json"};
console.log(params);
try {
    await s3.upload (params).promise();
    response =  { 
        statusCode: 200,
        body: "Uploaded Successfully"
    }
} catch (err){
    console.log(err)
    response =  {
        statusCode: 500,
        body: "Upload Failed"
    }
}


return response;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2020-12-23
    • 2018-01-19
    • 2017-01-29
    • 1970-01-01
    • 2018-03-02
    • 2018-03-16
    相关资源
    最近更新 更多