我有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;
答案 0 :(得分:2)
您可以通过创建S3客户端并将其传递给TransferUtility构造函数来轻松覆盖它。
var config = new AmazonS3Config { ServiceURL = "http://localhost:4572" };
var s3client = new AmazonS3Client(config);
如果您的本地堆栈将不同的端口用于S3,请不要忘记替换URL。
希望这会有所帮助。