AWS C#无法弄清楚如何将zip流上传到S3存储桶

时间:2018-08-26 19:52:45

标签: c# amazon-web-services amazon-s3 aws-lambda aws-sdk

我目前正在尝试通过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函数,因此欢迎提出任何建议。预先感谢。

1 个答案:

答案 0 :(得分:0)

根据注释中的诊断,AWS需要使用凭证才能允许访问S3存储桶。不幸的是,它没有在文档中提到这些是必需的,并且默认情况下是按照https://stackoverflow.com/a/43243290/784908中所述从磁盘上查找的。