

適用於 Xamarin 的 AWS Mobile SDK 現在已包含在 中 適用於 .NET 的 AWS SDK。本指南參考 Mobile SDK for Xamarin 的封存版本。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon S3 存放和擷取檔案


Amazon Simple Storage Service (Amazon S3) 為行動開發人員提供安全、耐用、高度可擴展的物件儲存。Amazon S3 易於使用，具有簡單的 Web 服務界面，可從 Web 上的任何位置存放和擷取任意數量的資料。

以下教學課程說明如何整合 S3 TransferUtility，這是搭配您的應用程式使用 S3 的高階公用程式。如需從 Xamarin 應用程式使用 S3 的詳細資訊，請參閱 [Amazon Simple Storage Service (S3)](s3.md)。

## 專案設定


### 先決條件


開始本教學課程之前，您必須完成[設定適用於 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 上的所有說明。

本教學課程也假設您已建立 S3 儲存貯體。若要建立 S3 儲存貯體，請造訪 [S3 AWS 主控台](https://console.aws.amazon.com/s3/home)。

### 設定 S3 的許可


預設 IAM 角色政策會授予應用程式對 Amazon Mobile Analytics 和 Amazon Cognito Sync 的存取權。若要讓您的 Cognito 身分集區存取 Amazon S3，您必須修改身分集區的角色。

1. 前往 [Identity and Access Management Console](https://console.aws.amazon.com/iam/home)，然後按一下左側窗格中**的角色**。

1. 在搜尋方塊中輸入您的身分集區名稱。將會列出兩個角色：一個用於未經驗證的使用者，另一個用於通過驗證的使用者。

1. 按一下未驗證使用者的角色 （身分集區名稱將附加不驗證）。

1. 按一下**建立角色政策**，選取**政策產生器**，然後按一下**選取**。

1. 在**編輯許可**頁面上，輸入下圖中顯示的設定，以您自己的名稱取代 Amazon Resource Name (ARN)。S3 儲存貯體的 ARN 看起來像`arn:aws:s3:::examplebucket/*`，由儲存貯體所在的區域和儲存貯體的名稱組成。以下顯示的設定會讓您的身分集區完整存取指定儲存貯體的所有動作。  
![\[Edit Permissions interface for AWS policy creation, showing options for Amazon S3 access control.\]](http://docs.aws.amazon.com/zh_tw/mobile/sdkforxamarin/developerguide/images/edit-permissions.png)

1. 按一下**新增陳述式**按鈕，然後按一下**下一步**。

1. 精靈會顯示您產生的組態。按一下**套用政策**。

如需授予 S3 存取權的詳細資訊，請參閱[授予 Amazon S3 儲存貯體的存取權](http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket)。

### 將 S3 的 NuGet 套件新增至您的專案


請遵循[設定適用於 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 中的步驟 4，將 S3 NuGet 套件新增至您的專案。

### （選用） 設定 S3 請求的簽章版本


與 Amazon S3 的每次互動，可以經過驗證身分或是匿名進行。AWS 使用 Signature 第 4 版或 Signature 第 2 版演算法來驗證對服務的呼叫。

2014 年 1 月之後建立的所有新 AWS 區域僅支援 Signature 第 4 版。不過，許多較舊的區域仍然支援 Signature 第 4 版和 Signature 第 2 版請求。

如果您的儲存貯體位於[此頁面](https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html)列出的其中一個不支援 Signature 第 2 版請求的區域，您必須將 AWSConfigsS3.UseSignatureVersion4 屬性設定為「true」，如下所示：

```
AWSConfigsS3.UseSignatureVersion4 = true;
```

如需 AWS Signature 版本的詳細資訊，請參閱[驗證請求 (AWS Signature 第 4 版）](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)。

## 初始化 S3 TransferUtility 用戶端


建立 S3 用戶端，將 AWS 登入資料物件傳遞給它，然後將 S3 用戶端傳遞給傳輸公用程式，如下所示：

```
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)](s3.md)。