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.)
                            
