我有一个简单的C#控制台项目,它正在处理S3 Bucket和s3对象。这是一个非常简单的项目,我可以找到一个对象并使用AmazonS3Client读取它。
我使用此参考进行工作:
例如,此功能是我的项目的一部分:
public static string GetSpecialObject(string FileName, string BucketName)
{
AmazonS3Client client = new AmazonS3Client(Amazon.RegionEndpoint.EUWest1);
// Create a GetObject request
GetObjectRequest request = new GetObjectRequest
{
BucketName = BucketName,
Key = FileName
};
using (GetObjectResponse response = client.GetObject(request))
{
using (StreamReader reader = new StreamReader(response.ResponseStream))
{
string contents = reader.ReadToEnd();
return contents;
}
}
}
如您所见,它正在存储桶中找到文件,我可以返回文件的值。
问题是什么 ?
我创建了一个AWS-Lambda项目(AWS-Lambda函数),并且尝试在其中使用GetSpecialObject函数。 (.Net Core 2)
我在AWS上使用AWS Toolkit发布了新项目,但是当我使用Invoke按钮运行它时,看到此错误:
“ errorType”:“ MissingMethodException”, “ errorMessage”:“未找到方法:'System.Collections.Generic.IList
1<System.String> Amazon.Runtime.SharedInterfaces.ICoreAmazonS3.GetAllObjectKeys(System.String, System.String, System.Collections.Generic.IDictionary
2)'。”, “堆栈跟踪”: [ “在App.AWSFileClass..ctor(String accessKey,String secret,String bucket)”, ……” ] }
似乎我们不能将此类(AmazonS3Client)用于AWS-Lambda服务。我用谷歌搜索了很多。我发现有一些我们可以在Nuget中添加的Amazon S3库,名称为:
但是这些库非常弱。
1-无论如何,是否可以在AWS Lambda(.net core 2)中使用AmazonS3Client类?
OR
2-是否有给我建议使用S3Client类读取s3object?
答案 0 :(得分:1)
.NET Core 2.0绝对支持AmazonS3Client。似乎您使用的是.NET Framework版本的SDK,而不是.NET Core。我可以告诉您,因为在您的代码中您正在调用同步GetObject调用,而.NET Framework仅支持该调用。对于.NET Core,您应该只看到GetObjectAsync
我很好奇您如何编译它。是在面向.NET Framework而不是.NET Standard的类库中分解了此代码的吗?
如果直接添加dll,则应添加NuGet软件包。添加AWSSDK.S3 NuGet包,并确保您没有对AWSSDK.Core.dll和AWSSDK.S3.dll的任何dll引用。通过添加NuGet软件包,它将解析为正确的平台版本