我目前正在尝试通过C#AWS Lambda函数将第三方API数据放入S3存储桶中。来自第3方的数据保存在一个zip文件中,我可以在本地保存该文件,因此我认为它可以按需要工作。下一步是将此数据通过流上传到S3存储桶,而不是在本地保存文件并上传等。
public static async void PutObjectAsync()
{
try
{
using (var client = new AmazonS3Client(Amazon.RegionEndpoint.EUWest2))
{
var ms = new MemoryStream();
GetStream().CopyTo(ms); //GetStream() returns the api data stream (Stream object).
var request = new PutObjectRequest()
{
BucketName = "*BUCKETNAME*",
Key = "data.zip",
InputStream = ms
};
var response = await client.PutObjectAsync(request);
}
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object"
, e.Message);
}
catch (Exception e)
{
Console.WriteLine(
"Unknown encountered on server. Message:'{0}' when writing an object"
, e.Message);
}
Console.ReadKey();
}
}
我得到的对象引用未设置为PutObjectAsync函数调用上的对象错误的引用。我已经检查了请求,并且内存流似乎已从CopyTo方法按预期加载。我知道存储桶中5MB以上的文件存在问题,但zip文件比5MB小很多。
这是我的第一个lambda函数,因此欢迎提出任何建议。预先感谢。
答案 0 :(得分:0)
根据注释中的诊断,AWS需要使用凭证才能允许访问S3存储桶。不幸的是,它没有在文档中提到这些是必需的,并且默认情况下是按照https://stackoverflow.com/a/43243290/784908中所述从磁盘上查找的。