🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Storage+

Storage+は、IT業界団体CompTIA認定の資格で、ストレージに関する知識を証明します。ストレージの設計・構築~運用・管理までの知識を評価し、接続時のトラブルシューティングや基礎的なストレージ・システム管理のスキルを取得している証明になります。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1618閲覧

Firebase storage に関して複数の画像をアップしその画像のURLを取得するコードを完成させたい。

JK_Taro

総合スコア20

Storage+

Storage+は、IT業界団体CompTIA認定の資格で、ストレージに関する知識を証明します。ストレージの設計・構築~運用・管理までの知識を評価し、接続時のトラブルシューティングや基礎的なストレージ・システム管理のスキルを取得している証明になります。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/04/05 10:43

プログラムの流れとしては、
1、複数枚の画像をブラウザ経由でフォルダから選択

2、Storageにアップロードし画像のURLを取得

3、URLをfirestoreのドキュメントに保存

で一応作動するものを書きましたが、firebaseのドキュメントにある、
「listen for state changes, errors, completion」 の部分をどう自分のコードに落とし込んだら
良いのかわかりません。

まず自分のコードは(特に上に書いた流れの2番の部分に注目して書いてます)

upload複数枚の画像を一括でアップロードし保存先のURLを取得

1function uploadImage(imageFiles, setProgress, postID, userID) { 2 //ファイルが空でないか 3 if (imageFiles !== null) { 4   //タイムスタンプをファイル名につける 5 let date = new Date(); 6 let t = date.getTime(); 7 let ts = Math.floor(t ); // timestamp 8 const nameOfFile = postID + String(ts); 9 10 //アップロードのプロミス集合体を作る 11 let promises = []; 12 promises = imageFiles.map((img, index) =>{ 13 const imageRef = ref(storage, `${userID}/images/${nameOfFile + '-' + String(index)}`); 14 return uploadBytesResumable(imageRef, img) 15 .then((snapshot) => getDownloadURL(snapshot.ref)) 16 .catch((error) => alert(error.code)); 17 }) 18    19  //実行して、終わったら取得したURLを配列としてドキュメントにセーブする 20 Promise.all(promises) 21 .then((mediaList) => { 22       //別に書いた関数を呼び出してfirestore のドキュメントにaddDocする 23 saveToDoc(mediaList, 'test1', postID); 24 }).catch((error) => alert(error.code)); 25 26   } 27 } 28}

次にfirebaseの公式ドキュメントですが、単数アップロードのコードで、ここには上記コードまだ書けていない、.onでリッスンするアップロードの状態やエラーハンドルをするコードがあります。これを上記のコードに落とし込むにはどう記述すればいいのでしょうか?

import { getStorage, ref, uploadBytesResumable, getDownloadURL } from "firebase/storage"; const storage = getStorage(); // Create the file metadata /** @type {any} */ const metadata = { contentType: 'image/jpeg' }; // Upload file and metadata to the object 'images/mountains.jpg' const storageRef = ref(storage, 'images/' + file.name); const uploadTask = uploadBytesResumable(storageRef, file, metadata); //////////////// // ※※※※※※※※※※※※※※※※※※※※※※※※※※※ここから※※※※※※※※ // Listen for state changes, errors, and completion of the upload. uploadTask.on('state_changed', (snapshot) => { // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100; console.log('Upload is ' + progress + '% done'); switch (snapshot.state) { case 'paused': console.log('Upload is paused'); break; case 'running': console.log('Upload is running'); break; } }, (error) => { // A full list of error codes is available at // https://firebase.google.com/docs/storage/web/handle-errors switch (error.code) { case 'storage/unauthorized': // User doesn't have permission to access the object break; case 'storage/canceled': // User canceled the upload break; // ... case 'storage/unknown': // Unknown error occurred, inspect error.serverResponse break; } //////////////// // ※※※※※※※※※※※※※※※※※※※※※※※ここまで※※※※※※※※※※※ }, () => { // Upload completed successfully, now we can get the download URL getDownloadURL(uploadTask.snapshot.ref).then((downloadURL) => { console.log('File available at', downloadURL); }); } );

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問