【问题标题】:How to resolve exception **System.MissingMethodException:** 'Method not found: void Amazon.S3.Transfer.TransferUtility.Upload()' (Xamarin AWS S3)如何解决异常 **System.MissingMethodException:** '找不到方法:无效 Amazon.S3.Transfer.TransferUtility.Upload()' (Xamarin AWS S3)
【发布时间】:2020-09-26 09:32:15
【问题描述】:

我正在阅读 AWS Mobile SDK - Xamarin 开发人员指南中的教程,我想将一个文本文件从我的 Android 手机(通过 Xamarin)上传到 AWS S3。这些是 2 个教程:Setting Up the AWS Mobile SDK for .NET and XamarinStore and Retrieve Files with Amazon S3

我正在使用void Amazon.S3.Transfer.TransferUtility.Upload(string,string,string) 方法上传我的文本文件。我尝试运行我的代码,但我不能。尽管我已经包含了正确的命名空间,但我遇到了这个异常**System.MissingMethodException:** 'Method not found: void Amazon.S3.Transfer.TransferUtility.Upload(string,string,string)'。我已经确认在namespace Amazon.S3.Transfer 中找到了方法void Amazon.S3.Transfer.TransferUtility.Upload(string,string,string)。下面是我的代码

client = new AmazonS3Client(credentials, bucketRegion);
var fileTransferUtility = new TransferUtility(client);
fileTransferUtility.Upload(_fileName, bucketName, "toDo.txt");

我已包含正确的命名空间,例如 using Amazon.S3; using Amazon.S3.Transfer;

以上代码适用于 Windows Presentation Foundation (WPF) 应用程序,但不适用于 Xamarin。

我已经添加了最新版本的

  • AWSSDK.Core (v3.3.107.8)
  • AWSSDK.S3 (v3.3.111.9)

如何解决此错误?

非常感谢任何帮助。非常感谢您。

【问题讨论】:

  • 检查是否有内部异常?或者尝试使用 UploadAsync。
  • @AniketBhansali 您的建议帮助我找到了解决方案。我将为我自己的问题提供解决方案。非常感谢!

标签: c# amazon-web-services xamarin amazon-s3


【解决方案1】:

我已成功上传我的文本文件。非常感谢 @AniketBhansali 建议检查内部异常,并尝试 UploadAsync。让我详细介绍一下我的调试过程。

总之,要上传我的文本文件,我

  1. 检查内部异常
  2. 是否上传异步
  3. 将我的凭证从一个 Amazon Cognito 凭证提供商提供的凭证更改为我用来访问我的 AWS 账户的 IAM 用户

由于某种原因,transferUtility.Upload() 不起作用,但 transferUtility.UploadAsync() 起作用。

所以一开始我检查了像这样的 S3 特定异常

try
{
    var fileTransferUtility = new TransferUtility(client);
    fileTransferUtility.Upload(_fileName, bucketName, "toDo.txt");
}
catch(AmazonS3Exception exception)
{
    Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", exception.Message);
}
catch (Exception exception)
{
    Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", exception.Message);
}

但是,仍然出现相同的异常消息。所以我尝试了 UploadAsync 而不是 Upload 这样

await fileTransferUtility.UploadAsync(_fileName, bucketName, "toDo.txt");

幸运的是,我收到了一条新的错误消息。 Unknown encountered on server. Message:'Object reference not set to an instance of an object' when writing an object

我在 Google 上搜索并找到了这个 Null reference exception with AWS S3 API

从这个问题线程中,我怀疑发生错误是因为我使用了来自 Amazon Cognito 凭证提供商的凭证

因此,我将 凭据更改为 IAM 用户,我用于访问我的 AWS 账户,并设法将我的文本文件发送到 AWS S3。

【讨论】:

  • 您可以稍后标记它,这将帮助更多有相同问题的人:)。
  • @JackHua-MSFT 会的!谢谢!
【解决方案2】:

AWS 的发展非常迅速,因此他们可能在新的 SDK 中停止支持旧方法。 AWS 的最新指南建议改用 transferUtility.Upload(file, bucketName)。它应该是这样的:

// Initialize the AWS TransferUtility client
var s3Client = new AmazonS3Client(credentials,region);
var transferUtility = new TransferUtility(s3Client);
// Upload on the Transfer Utility object
transferUtility.Upload(
  Path.Combine(Environment.SpecialFolder.ApplicationData,"file"),
  "bucketName"
);

【讨论】:

  • 我使用了transferUtility.Upload(file, bucketName),但仍然收到相同的异常消息。非常感谢!
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
相关资源
最近更新 更多