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

时间:2018-06-15 10:15:52

标签: c# .net amazon-web-services amazon-s3 atlassian-localstack

我有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使用localstack而不是aws。显然,您可以在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类,我就会得到一个空引用异常 - 这是在我将任何内容指向我的localstack设置之前。

AWS ASK的版本是3.3.0。

另外需要注意的是,在文档中的某些地方暗示配置应该是xml文件而不是json,但是,当我尝试使用xml文件时,我在新建时遇到了不同的异常TransferUtility:&#39;无效字符&#39;&lt;&#39;在输入字符串&#39;

1 个答案:

答案 0 :(得分:2)

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

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

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

希望这会有所帮助。