Невозможно загрузить на AWS S3 в моей функции Lambda - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующая лямбда-функция. Он получил XML, просматривает его, находит файл base64 pdf и пытается загрузить его на S3.

index.js

const AWS = require('aws-sdk');
const xml2js = require('xml2js');
const pdfUpload = require('./upload_pdf');
const s3 = new AWS.S3();

exports.handler = async (event, context, callback) => {
    let attachment;
    xml2js.parseString(event.body, function(err, result) {      
      attachment = 
        result.Attachment[0].Data[0];

      if (attachment) {
        pdfUpload(attachment); 
      }

    });

    return {
      statusCode: 200
    }
};

upload_pdf.js

/**
 *
 * @param  {string}  base64 Data
 * @return {string}  Image url
 */
const pdfUpload = async (base64) => {

  const AWS = require('aws-sdk');
  const s3 = new AWS.S3();
  const base64Data = new Buffer.from(base64, 'base64');

  // With this setup, each time your user uploads an image, will be overwritten.
  // To prevent this, use a different Key each time.
  // This won't be needed if they're uploading their avatar, hence the filename, userAvatar.js.
  const params = {
    Bucket: 'mu-bucket',
    Key: `123.pdf`, 
    Body: base64Data,
    ACL: 'public-read',
    ContentEncoding: 'base64', 
    ContentType: `application/pdf` 
  }

  let location = '';
  let key = '';
  try {
    const { Location, Key } = await s3.upload(params).promise();
    location = Location;
    key = Key;
  } catch (error) {
     // console.log(error)
  }

  console.log(location, key);

  return location;
}

module.exports = pdfUpload;

Независимо от того, что я делаю, файл не загружается. Я проверил разрешения, и лямбда имеет доступ к ведру. При запуске лямбды я тоже не получаю никаких ошибок. Кто-нибудь может увидеть, что здесь может быть не так?

1 Ответ

0 голосов
/ 17 апреля 2020

Во-первых, как совет, я думаю, что вы должны поместить больше журналов, чтобы увидеть, на каких этапах функция зависает / не работает

Второе, что вы можете попробовать, это поставить await

        await pdfUpload(attachment); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...