Cloud Functions 등 firebase-admin으로 Storage를 추가, 삭제, 존재 확인
새로운 보고 기능이 출시되었습니다
화면은 이런 느낌.
#적독하우마치 에서 새롭게 추가한 보고 기능, OGP 화상의 생성을 하거나 하기 때문에, 조금 읽어들이기에 시간이 필요한 때도... 조금 기다려 주실 수 있으면 기쁩니다!! 피 c. 라고 r. 코 m / 8tLR 9 4h — 적독 하우매치 📚 키라 푸카 (@kira_puka) August 20, 2019
트윗에도 쓰여진 대로, 뒤에서는,
- OGP 이미지가 생성되는지 확인
- 생성하지 않으면 OGP 이미지 생성
하고 있습니다.
Firebase Functions에서 이러한 작업을 수행하고 있지만
firebase-admin을 사용한 경우 Storage가 다르기 때문에
비망록적으로 정리해 둡니다.
(ImageMagic을 사용한 이미지 생성 및 업로드 기사는 여기)
firebase-admin은 Google Cloud Storage API를 사용합니다.
@ 히츠지 네타 님의 기사 를 보면, 클라이언트판과는 달리,
firebase-admin을 사용하면 Google Cloud Storage API를 사용합니다.
이므로 API 참조도
@google-cloud/storage 쪽을 확인할 필요가 있다.
다양한 작업을하는 코드
코드로서는, 이런 느낌.
- 파일 추가/업로드:
upload()
- 다운로드 URL 받기:
download()
- 파일 존재 확인:
exists()
- 파일 삭제:
deleteFile()
에서 위의 처리를 각각 수행하고 있습니다.
firebase-admin을 로컬에서도 실행 가능 그래서
이번은 Functions가 아니라 그쪽의 코드 예.
const admin = require("firebase-admin");
// 配置したサービスアカウントの秘密鍵を取得
const serviceAccount = require("./key/XXXXX.json");
// firebase-adminを初期化
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
// storageBucketはローカルで実行するときのみ必要。
// Functions上ではFunctions側で設定される
storageBucket: "your-storage-bucket-name.appspot.com"
});
// storageのbucketのインスタンスを取得
const bucket = admin.storage().bucket();
/**
* Cloud Storageへのアップロード
*
* @param {string} uploadFile アップロードするファイル
* @param {string} uploadPath アップロード先のStorageのパス
*/
async function upload(uploadFile, uploadPath) {
await bucket.upload(uploadFile, { destination: uploadPath });
}
/**
* Cloud Storageへのダウンロード(StoregeのURL取得)
* 簡易化のため、署名付きURLの取得ではなく、Storage上のURLを生成しています。
*
* @param {string} uploadedPath アップロード済みのstorage上のパス
* @returns {string} ダウンロードURL
*/
async function download(uploadedPath) {
const STORAGE_ROOT = "https://firebasestorage.googleapis.com/v0/b";
const bucketName = bucket.name;
const dlPath = encodeURIComponent(uploadedPath);
const dlURL = `${STORAGE_ROOT}/${bucketName}/o/${dlPath}?alt=media`;
return dlURL;
}
/**
* Cloud Storage上のファイルの存在確認
*
* @param {string} uploadedPath アップロード済みのstorage上のパス
* @returns {boolean} ファイルの存在有無
*/
async function exists(uploadedPath) {
const exists = await bucket.file(uploadedPath).exists();
return exists[0];
}
/**
* Cloud Storage上のファイルの削除
*
* @param {string} uploadedPath アップロード済みのstorage上のパス
*/
async function deleteFile(uploadedPath) {
await bucket.file(uploadedPath).delete();
}
// ****************************
// * MAIN
// ****************************
async function main() {
console.log(`***** START MAIN`);
// アップロード
const uploadFile = "./ogp_top.png"; // アップロードしたいファイルのパス
const uploadPath = "ogp/generate_ogp.png"; // アップロード先のStorage上のパス
await upload(uploadFile, uploadPath);
console.info(`${uploadFile} is uploaded into '${uploadPath}'.`);
// ダウンロード
const uploadedPath = uploadPath;
const downloadURL = await download(uploadedPath);
console.info(`downloadURL=${downloadURL}`);
// ファイルの存在確認
const isExists = await exists(uploadedPath);
console.info(`isExists=${isExists}`);
// ファイルの削除
await deleteFile(uploadedPath);
console.info(`${uploadedPath} is deleted.`);
console.log(`***** END MAIN`);
}
main().then();
로컬로 실행할 때의 주의점으로서는 admin.initializeApp()
때로storageBucket
를 설정해야 한다.
Functions상에서 실행하는 경우는, Functions측에서 설정해 주기 때문에 불필요합니다.
// firebase-adminを初期化
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
// storageBucketはローカルで実行するときのみ必要。
// Functions上ではFunctions側で設定される
storageBucket: "your-storage-bucket-name.appspot.com"
});
지금 로컬로 생성된 파일도 업로드할 수 있습니다(´ω`)
물론 Cloud Functions에서도 움직이기 때문에 처음 트윗 동영상처럼
존재 확인 및 생성 등도 가능하거나 ヽ(=´▽`=)노
결론
Nuxt.js나 Firebase를 사용하면서 기능 추가하고 있는 서비스입니다!
적독 총액 랭킹이나 인기의 책 등도 있으므로, 좋으면 아무래도 받을 수 있으면!!
쌓은 책의 총액을 알 수 있는 독서 관리 서비스
'적독 하우 매치'
요망·감상·어드바이스 등 있으면,
공식 계정( @MemoryLoverz )과 개발자( @kira_puka )까지~♪
참고로 한 사이트
- Firebase Admin SDK에서 Storage로 업로드 - Qiita
- Cloud Functions + ImageMagick을 사용하여 OPG 이미지를 동적으로 생성하여 Cloud Storage에 업로드합니다.
- 로컬 PC에서 firebase-admin을 사용하여 Firestore 조작 (관리 도구) - 해파리가되고 싶다.
- @google-cloud/storage 2.5.0 » Class: Bucket | Node.js | Google Cloud
- @google-cloud/storage 2.5.0 » Class: File | Node.js | Google Cloud
- File upload with filestreams and Firebase cloud functions + cloud storage - Stack Overflow
Reference
이 문제에 관하여(Cloud Functions 등 firebase-admin으로 Storage를 추가, 삭제, 존재 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kira_puka/items/8743c2b1a012a934ef92
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Cloud Functions 등 firebase-admin으로 Storage를 추가, 삭제, 존재 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kira_puka/items/8743c2b1a012a934ef92텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)