iT邦幫忙

2022 iThome 鐵人賽

0
tags: 釣魚術 swift AWS Amplify

前言

  • 接續前一篇談論集郵冊的 【Day 37】,今天來試用 Amplify (AWSS3StoragePlugin) 的上傳功能。
  • 先確定腿腿有接上來!!!

開發與修改

裝新套件 -- AWSS3StoragePlugin

  • 從 AWS console 選擇 Amplify
  • 選擇先前我們建立好的建立 BaoAnGongFisherAmp 並且選擇 Launch Studio
  • Studio 左側選擇選擇 Storage,建立 S3 Bucket 唷! 然後設定權限,這個權限是和我們先前會員系統關聯的,區分有登入及未登入的使用者,分別對應的權限。
    • 參考 官方文件
    • Guest: Accessible by all users of your application (大家都可以存取)
    • Protected: Readable by all users, but only writable by the creating user (大家可以讀、檔案健禮者可以寫)
    • Private: Readable and writable only by the creating user (只有自己可以讀寫)
  • 建好了之後,console 上又出現了給你參考的程式碼。(先別急,這個還不能馬上用)
  • 編輯一下 Podfile,裡面加一行 Pod 'AmplifyPlugins/AWSS3StoragePlugin'
  • 接下來透過 pod install --repo-update 來安裝我們後面加進來的套件。如果你沒裝的話,上面那個範例自然一動也不動。

引用這個套件

  • 在程式碼中,插入這個東西
  • 在 BaoAnGongFisherApp.swift 這個檔案中引用
    import AWSS3StoragePlugin
    
  • 呼叫看看...
    • 噴錯啦!!在 Build Phase 中把多餘的產品拿掉吧!!
  • 再次 Build 然後確定套件裝好了會動啦!!

上傳檔案

  • 前面隨餐附贈的湯...可以根據個人喜好決定要不要服用。 我的話? 我把那串貼上去,看起來不能馬上用欸。 我建議您可閱讀參考資料中的影片連結,操作一次看看。
  • 因為這個上傳檔案的功能,是設計給已經透過 Amplify Auth 登入的 Signed-in user,所以在測試程式碼能不能上傳的時候,要先登入!要先登入!要先登入!!!!
    • 參考上圖,把 BaoAnGongFisherApp.swift 的 16 行改回去顯示 「AuthView」 即可。
  • 先前因為開發好會員功能後,在每次打開 App 的時候都嫌登入好麻煩,所以先把它藏起來了。今天我要把這個登入畫面放回來。另外,設計一個「訪客登入」的按鈕,讓別人快速繞過登入的步驟。
    • 哎!要繞過那的登入畫面喔,就直接把 struct「AuthView」 內的 「showSignPage」(上圖 61 ~ 63 行) 設定成 false 就繞過去啦!

範例的上傳 function -- uploadFile

func uploadStamp() {
    let fileKey = "fish_test.txt"
    let fileContents = "This is SPADA!!!"
    let fileData = fileContents.data(using: .utf8)!

    Amplify.Storage.uploadData(
        key: fileKey,
        data: fileData
    ) { result in

        switch result {
        case .success(let key):
            print("file with key \(key) uploaded")

            DispatchQueue.main.async {
                self.fileStatus = "File uploaded"
            }

        case .failure(let storageError):
            print("Failed to upload file", storageError)

            DispatchQueue.main.async {
                self.fileStatus = "Failed to upload file"
            }
        }
    }
}
  • 關於這條的說明,幾個重點:檔案的名字(S3 object key)、檔案內容編碼
  • 而裡面有使用到 DispatchQueue 這個先前在實作 FishingLocationView.swift 的時候,也使用過一次。關於 DispatchQueue 的說明,先看 Apple 文件。 我們在呼叫或是使用某些語法時,需要等待 IO 完成他的工作,因此把這個上傳的 Task 放到佇列中執行。

看結果

  • 按下登入、清除先前的連線、嘗試登入、成功後跳轉畫面;點選畫面中用來測試上傳功能的臨時按鈕呼叫上傳功能喔!!
  • 看起來都正常執行了;檢查看看 S3 裡面已經長出檔案了。

心得

  • 要思考一下資料怎麼放!
  • 像是,我在先前的私房釣點的畫面中加入「上傳」「下載」按鈕,藉此同步資料到雲上,或是從雲上試圖提取資料回到手機中。
  • 然後是集郵冊的儲存行為。先前我把集郵冊功能開發到,按下新增按鈕後,可以拍照(不過還沒生成檔案),然後取名字;尚未把新產生的郵票,填到 UI 中,並且將這些資訊寫成文字檔、對應檔名的圖檔;有了這些之後,再制訂擺到 S3 的方式。
    • 私房釣點應該放在 Protected 或是 Private;根據使用者設定決定限制公開範圍。
    • 郵票、集郵冊功能,原則上是 Public 文字及對應圖檔。
    • 上述兩種資料擺放赴境,根據使用者的帳號或是 Email 加進 Object Key 中。
  • 今天在操作會員註冊時,發現電話的字串(完整電話號碼),是 +8869 開頭的 字串才是合規格式,所以這邊之後需要針對使用者的輸入內容檢查並且調整格式。
  • 今天先到這裡,明天再來說明資料放法。

參考資料

  1. Getting Started with AWS Amplify Storage on iOS

上一篇
【Day 37】集郵冊:完成郵票設計 / 研究如何以 AWS Amplify 儲存圖片環境
系列文
無法成為釣魚大師也要努力摸魚!!辣個吃魚神器 APP38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言