在 .net 上使用 AWS SDK 和 localstack(TransferUtility/S3 - 设置端点)

Using AWS SDK on .net with localstack (TransferUtility/S3 - setting endpoint)

我有 localstack (https://github.com/localstack/localstack) 运行 并且能够使用 aws s3 cli 将文件上传到它。

我希望能够将 .NET AWS ADK 与 localstack 结合使用。我想要以下代码将文件上传到 localstack:

        using (var tfu = new TransferUtility())
        {
            await tfu.UploadAsync(new TransferUtilityUploadRequest
            {
                Key = key,
                BucketName = bucketName,
                ContentType = document.ContentType,
                Headers = { ["Content-Disposition"] = "attachment; filename=\"test.txt\"" },
                InputStream = stream
            });
        }

我的问题是我不知道如何设置端点,以便 SDK 而不是 aws 使用 localstack。显然,您可以按照 AWS SDK 文档中的说明在 appSettings.config 中设置 AWSEndpointDefinition,例如:

<add key="AWSEndpointDefinition" value="C:\Dev\localstack\endpoints.json"/>

但是我不知道这个 endpoints.json 配置应该是什么样子。我尝试使用这个文件:

https://raw.githubusercontent.com/aws/aws-sdk-net/master/sdk/src/Core/endpoints.json

当我这样做时,只要我新建一个 TransferUtility class,我就会得到一个空引用异常 - 这是在我将任何内容指向我的 localstack 设置之前。

AWS ASK 版本为 3.3.0。

另一件需要注意的事情是,在文档的某些地方暗示配置应该是 xml 文件而不是 json,但是,当我尝试使用 xml 文件,而不是我在更新 TransferUtility 时得到一个不同的异常:'Invalid character '<' in input string'

您可以通过创建 S3 客户端并将其传递给 TransferUtility 构造函数来轻松覆盖它。

var config = new AmazonS3Config { ServiceURL = "http://localhost:4572" };
var s3client = new AmazonS3Client(config);

如果您的本地堆栈为 S3 使用不同的端口,请不要忘记替换 URL。

希望对您有所帮助。