gpt4 book ai didi

node.js - 将图像附加到 S3 存储桶中以使用 SendGrid 发送

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:05 24 4
gpt4 key购买 nike

我正在使用 Xcode 7.3.1 在 Swift 2.2 中编写 iOS 应用程序。然后,对于后端服务,我使用AWS Mobilehub(S3Lambda)

应用程序应执行的操作:拍摄屏幕截图,将其发送到 AWS S3 存储桶,使用 AWS Lambda 通过 SendGrid 发送屏幕截图em> 函数触发器。

我的问题:我似乎无法将 S3 存储桶中的该死的图像附加到电子邮件中。在本地它工作正常,但上传到 Lambda 时会抛出以下错误:

Error: ENOENT: no such file or directory, open '...'

使用以下代码:

'use strict';

var fs = require('fs');

console.log('Loading function');

let aws = require('aws-sdk');
let s3 = new aws.S3({ apiVersion: '2006-03-01' });

exports.handler = (event, context, callback) => {

// Get the object from the event and show its content type
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));

var helper = require('sendgrid').mail;

let from_email = new helper.Email("from@gmail.com");
let to_email = new helper.Email("to@gmail.com");
let subject = "Hello World from the SendGrid Node.js Library";
let content = new helper.Content("text/plain", "Email content");

let mail = new helper.Mail(from_email, subject, to_email, content);


var bse64 = base64_encode(INeedThisFrigginPath);

let attachment = new helper.Attachment();
attachment.setContent(bse64);
attachment.setType("image/png");
attachment.setFilename(key);
attachment.setDisposition("attachment");
mail.addAttachment(attachment);

var sg = require('sendgrid')('SG.sengridkey');

var requestBody = mail.toJSON();
var emptyRequest = require('sendgrid-rest').request;
var requestPost = JSON.parse(JSON.stringify(emptyRequest));
requestPost.method = 'POST';
requestPost.path = '/v3/mail/send';
requestPost.body = requestBody;
sg.API(requestPost,
function (error, response)
{
console.log(response.statusCode);
console.log(response.body);
console.log(response.headers);
}
);
};

// function to encode file data to base64 encoded string
function base64_encode(file)
{
// read binary data
var bitmap = fs.readFileSync(file);
// convert binary data to base64 encoded string
return new Buffer(bitmap).toString('base64');
}

具体来说这一行:

var bse64 = base64_encode(INeedThisFrigginPath);

问题所在很明显,所以我需要知道的是,图像的正确路径是什么。

我尝试使用键值和图像链接:

https://s3.eu-central-1.amazonaws.com/bucketname/public/test0.png

运气不好。

如果有人可以通过提供代码、教程或只是一般性的指导来帮助我,以插入我走向正确的方向,那就太好了。也许使用 AWS S3、AWS Lambda 和 SendGrid 不一定是这里使用的最佳技术?

非常感谢!

最佳答案

您正在尝试构建该文件的路径,然后尝试将其作为本地文件打开。该文件不是本地的,而是在 S3 上,因此您不能这样做。您有两个选择:

  • 首先将文件从 S3 下载到 Lambda(下载到/tmp 目录),然后在打开文件时引用本地路径。
  • 使用 AWS S3 SDK 打开文件的 ReadStream。

关于node.js - 将图像附加到 S3 存储桶中以使用 SendGrid 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com