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

标签 c# .net amazon-web-services amazon-s3 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 而不是 aws 使用 localstack。显然你可以设置 AWSEndpointDefinition在 appSettings.config 中,如 AWS SDK 文档中所述,例如:

<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 : '输入字符串中的无效字符'<''

最佳答案

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

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

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

希望这对您有所帮助。

关于c# - 在 .net 上使用 AWS SDK 和 localstack(TransferUtility/S3 - 设置端点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50873540/

相关文章:

C# PDF 生成(在 Azure 上使用 IronPDF)

c# - 如何将 Signalr 扩展到大量用户

c# - 从字符串列表中查找最大时间

c# - 验证有效时间的正则表达式

amazon-s3 - EMR 如何将文件合并为一个?

c# - 带有受限泛型参数的奇怪方法重载解析 : overload with base class arg always called

c# - 如何在开发环境中将浅色主题设置为默认?

.net - 从字符串中获取流的最简单方法是什么

node.js - 在nodejs中,我可以有子文件夹,每个子文件夹都托管一个AWS lambda函数吗?

amazon-web-services - 如何在上传具有特定后缀的 S3 key 时触发 AWS 事件规则