AWS SDK for .NET 现在包括适用于 Xamarin 的 AWS Mobile SDK。本指南参考了适用于 Xamarin 的 Mobile SDK 的存档版本。
使用 Amazon S3 存储和检索文件
Amazon Simple Storage Service (Amazon S3) 为移动开发人员提供安全、持久、高度可扩展的对象存储。Amazon S3 易于使用,包含一个简单的 Web 服务界面,可从 Web 上的任何位置存储和检索任意数量的数据。
以下教程介绍了如何集成 S3 TransferUtility,这是一个让您的应用程序能够使用 S3 的高级实用工具。有关从 Xamarin 应用程序使用 S3 的更多信息,请参阅 Amazon Simple Storage Service (S3)。
项目设置
先决条件
在开始本教程前,必须先完成有关设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK 的说明中的所有步骤。
本教程还假定您已创建 S3 存储桶。要创建 S3 存储桶,请访问 S3 AWS 管理控制台
设置 S3 权限
默认 IAM 角色策略会授予您的应用程序访问 Amazon Mobile Analytics 和 Amazon Cognito Sync 的权限。为了让您的 Cognito 身份池能够访问 Amazon S3,您必须修改身份池的角色。
-
转至 Identity and Access Management Console
,然后单击左窗格中的 Roles。 -
在搜索框中键入您的身份池名称。将列出两个角色:一个用于未经身份验证的用户,另一个用于经过身份验证的用户。
-
单击用于未经过身份验证的用户的角色 (身份池名称后附加有“unauth”)。
-
单击 Create Role Policy,选择 Policy Generator,然后单击 Select。
-
在编辑权限页面上,输入下图所示的设置,用您自己的资源名称替换 Amazon 资源名称 (ARN)。S3 存储桶的 ARN 类似
arn:aws:s3:::examplebucket/*
,由存储桶所在的区域和存储桶的名称构成。下面显示的设置将赋予您的身份池对指定存储桶执行所有操作的完全访问权限。
-
单击 Add Statement 按钮,然后单击 Next Step。
-
向导将向您显示生成的配置。单击应用策略。
有关授予访问 S3 的权限的更多信息,请参阅授予访问 Amazon S3 存储桶的权限
将 S3 NuGet 程序包添加到您的项目中
按照设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK 中第 4 步的说明操作,将 S3 NuGet 程序包添加到您的项目中。
(可选) 配置针对 S3 请求的签名版本
与 Amazon S3 的每一次交互都是经身份验证的或匿名的。AWS 使用签名版本 4 或签名版本 2 算法来对服务调用进行身份验证。
2014 年 1 月之后创建的所有新的 AWS 区域仅支持签名版本 4。但是,许多较旧的区域仍支持签名版本 4 和签名版本 2 请求。
如果您的存储桶位于不支持签名版本 2 请求的区域之一,如本页中所列,则您必须将 AWSConfigsS3.UseSignatureVersion4 属性设置为“true”,如下所示:
AWSConfigsS3.UseSignatureVersion4 = true;
有关 AWS 签名版本的更多信息,请参阅对请求进行身份验证(AWS 签名版本 4)。
初始化 S3 TransferUtility 客户端
创建 S3 客户端,将其传递给您的 AWS 凭证对象,然后将 S3 客户端传递到 Transfer Utility,如下所示:
var s3Client = new AmazonS3Client(credentials,region); var transferUtility = new TransferUtility(s3Client);
将文件上传到 Amazon S3
要将文件上传到 S3,请对 Transfer Utility 对象调用 Upload
,并传递下列参数:
-
file
– 要上传的文件的名称 (字符串) -
bucketName
– 用来存储文件的 S3 存储桶的字符串名称
transferUtility.Upload( Path.Combine(Environment.SpecialFolder.ApplicationData,"file"), "bucketName" );
以上代码假定目录 Environment.SpecialFolder.ApplicationData 中有一个文件。上传操作将自动对大文件使用 S3 的多分段上传功能以增强吞吐量。
从 Amazon S3 下载文件
要从 S3 下载文件,请对 Transfer Utility 对象调用 Download
,并传递下列参数:
-
file
– 要下载的文件的名称 (字符串) -
bucketName
– 要从中下载文件的 S3 存储桶的字符串名称 -
key
– 代表要下载的 S3 对象 (这里为一个文件) 名称的字符串
transferUtility.Download( Path.Combine(Environment.SpecialFolder.ApplicationData,"file"), "bucketName", "key" );
有关从 Xamarin 应用程序访问 Amazon S3 的更多信息,请参阅 Amazon Simple Storage Service (S3)。