- Published on
ASP.NET Core 上傳檔案到 Firebase Storage
先前的文章已經有介紹過啟用 Firebase 的 Storage 服務 和 ASP.NET Core 的檔案上傳,接下來就來看如何使用 ASP.NET Core 把檔案上傳到 Firebase 的 Storage 吧
ASP.NET Core 2.2
安裝套件
Nuget 安裝 FirebaseAuthentication.net
- 串接 Firebase 的登入使用
Nuget 安裝 FirebaseStorage.net
- 使用 Storage 的服務
登入 Firebase
- 需要使用先前文章建立好的相關資訊,請自行替換
- _apiKey
- _email, _password
- _host,只有 Host 的部份,例如
mymvc.appspot.com
- 使用 ApiKey 建立
AuthProvider
- 使用
AuthProvider
加上帳號和密碼作登入,登入後會拿到登入的資訊 - 使用 Host 和登入的資訊取得
FirebaseStorage
private async Task<FirebaseStorage> FirebaseStorage()
{
var auth = new FirebaseAuthProvider(new FirebaseConfig(_apiKey));
var loginInfo = await auth.SignInWithEmailAndPasswordAsync(_email, _password);
var storage = new FirebaseStorage(_host, new FirebaseStorageOptions
{
AuthTokenAsyncFactory = () => Task.FromResult(loginInfo.FirebaseToken),
ThrowOnCancel = true
});
return storage;
}
上傳檔案
- 和先前檔案上傳的文章結合
- 先拿到登入後 Firebase 的 Storage
- 檔案上傳後轉成
MemoryStream
- 使用 storage 的
PutAsync
,傳入MemoryStream
就可以把檔案上傳- 檔名和資料夾都可以使用
Child
設置
- 檔名和資料夾都可以使用
var storage = await FirebaseStorage();
var url = string.Empty;
using (var ms = new MemoryStream())
{
img.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
url = await storage.Child(img.FileName).PutAsync(ms);
}
- 測試,上傳後可以拿到圖片的 URL
- 檢查 Firebase,可以看到上傳的檔案
- 加入資料夾
Folder
測試
await storage.Child("Folder").Child(img.FileName).PutAsync(ms);
- 檢查 Firebase,可以看到多了一個資料夾
刪除檔案
- 其實和上傳差不多,只是把方法換成
DeleteAsync
var storage = await FirebaseStorage();
try
{
await storage.Child(fileName).DeleteAsync();
}
catch (Exception e)
{
var msg = e.Message;
}
- 如果刪除不存在的檔案會發生
Exception
,需要注意
後記
- 如果有檔案或是圖片上傳的需求,用 Firebase 是一個不錯的選擇,不過使用免費方案的話需要注意額度不要超限了,請參考官方網頁
- 之前的使用過程踩從登入到上傳都採了不少的雷,不過現在再看程式碼好像沒有什麼 Orz...
- 有機會在來介紹 Firebase 的
Realtime Database