Ben*_*Ben 5 .net c# amazon-s3 amazon-web-services 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
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何设置端点以便 SDK 使用 localstack 而不是 aws。显然,您可以AWSEndpointDefinition按照 AWS SDK 文档中所述在 appSettings.config 中进行设置,例如:
<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类,我就会得到一个空引用异常 - 这是在我将任何内容指向我的本地堆栈设置之前。
AWS ASK 的版本是 3.3.0。
另一件需要注意的事情是,在文档中的某些地方,暗示配置应该是 xml 文件而不是 json,但是,当我尝试使用 xml 文件时,我在更新时会遇到不同的异常:' TransferUtilityInvalid输入字符串中的字符“<”
小智 5
您可以通过创建 S3 客户端并将其传递给 TransferUtility 构造函数来轻松覆盖它。
var config = new AmazonS3Config { ServiceURL = "http://localhost:4572" };
var s3client = new AmazonS3Client(config);
Run Code Online (Sandbox Code Playgroud)
如果您的本地堆栈对 S3 使用不同的端口,请不要忘记替换 URL。
希望这可以帮助。