質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

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

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Q&A

解決済

1回答

1577閲覧

【Vue x Firestore】プロフィール情報の変更時、画像を新しく選択しないと更新が出来ないので改善したい。

TMTN

総合スコア53

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

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

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

0グッド

0クリップ

投稿2021/05/21 10:59

編集2021/05/22 01:48

#プロフィール情報の変更時、画像を新しく選択しないと更新が出来ないので改善したい。

現状下記のようなエラーが出てしまっております。
エラー内容を確認しても原因がわからず困っています。

分かる方いらっしゃいましたらお力添えをいただきたいです。
よろしくお願い致します。


[Vue warn]:v-onハンドラーのエラー: "FirebaseError:Firebase Storage:操作 'put'はルート参照で実行できません。子を使用して非ルート参照を作成してください、.child( 'file.png')。(storage / invalid-root-operation)など


FirebaseError:Firebase Storage:操作 'put'はルート参照に対して実行できません。.child( 'file.png')などの子を使用して非ルート参照を作成してください。 (ストレージ/無効なルート操作)

イメージ説明

     <button @click=" show(); openModal(); " class="profile-edit flex" > プロフィール編集 </button> <modal class="modal-inner" v-scroll-lock="open" name="edit" :width="1100" :height="740" > <div data-modal="edit" aria-expanded="true" class="vm--overlay"> <div class="vm--top-right-slot"></div> </div> <div class="modal-header flex"> <h2 class="profile-tll flex">プロフィールを編集する</h2> <hr class="separate" /> </div> <div class="modal-body"> <div class="profile-inner flex"> <div class="profile-contens flex"> <div class="profile-img-inner flex"> <img :src=" uploadedImage == '' ? preview : uploadedImage.fileUrl " width="200" height="200" class="profile-img" alt="プロフィール画像" /> <label class="profile-txt profile-update"> プロフィール画像を編集する <input type="file" @change="onFileChange" style="display:none" /> </label> </div> <div class="line"></div> <div class="profile-items flex"> <div class="profile-contens flex"> <input type="text" class="profile-item" placeholder="名前" v-model="name" /> </div> ~ 省略 ~ <button @click=" updateBtn " class="update-btn flex" > 更新 </button> </div>
methods: { onFileChange(e) { const image = e.target.files; this.file = image[0]; const S = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; const N = 16; this.uploadUrl = Array.from(crypto.getRandomValues(new Uint32Array(N))) .map((n) => S[n % S.length]) .join(""); let self = this; let fileReader = new FileReader(); fileReader.onload = function() { self.preview = fileReader.result; }; fileReader.readAsDataURL(this.file); }, updateBtn() { const uploadTask = firebase .storage() .ref(this.uploadUrl) .put(this.file); uploadTask.then(() => { uploadTask.snapshot.ref.getDownloadURL().then((fileUrl) => { const uploadedImage = { fileUrl: fileUrl, time: firebase.firestore.FieldValue.serverTimestamp(), }; firebase .firestore() .collection("users") .doc(this.$route.params.uid) .set( { name: this.name, sex: this.sex, age: this.age, access: this.access, selfpr: this.selfpr, profession: this.profession, genre: this.genre, favMovie: this.favMovie, uploadedImage: uploadedImage, time: firebase.firestore.FieldValue.serverTimestamp(), }, { merge: true } ); this.$swal({ title: "内容確認", text: "この内容で投稿しますか?", icon: "info", buttons: true, dangerMode: true, }).then((willDelete) => { if (willDelete) { this.$swal("投稿しました。", { icon: "success", }); this.$router.go({ path: `/mypage/${this.$route.params.uid}`, force: true, }); } else { this.$swal("キャンセルしました。"); } }); }); }); },

#追記

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

const uploadTask = firebase .storage() .ref() .child(this.uploadUrl) .put(this.file);

こちらで行けると思います。

詳細はfirebaseのサンプルコードを参照してください。
https://firebase.google.com/docs/storage/web/upload-files?hl=ja

投稿2021/05/21 12:59

Arahabica

総合スコア209

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

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

TMTN

2021/05/22 01:47

ご回答ありがとうございます。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー updateBtn() { const uploadTask = firebase .storage() .ref() .child(this.uploadUrl) .put(this.file); ーーーーーーーーーーーーーーーーーーーーーーーーーーー 上記のようにしましたが、追記としてスクショを再度掲載させていただきましたが、定義もしていない「未定義のプロパティ 'split'を読み取れません"」といエラーが出ました・・コード内で調べてもどこにも定義していないです。。
Arahabica

2021/05/22 09:39

this.uploadUrlがundefinedになってるかもしれません。 console.log(this.uploadUrl) などで確認してみてください。
TMTN

2021/05/22 13:19

本件につきましては解決と致しましたのでベストアンサーとさせて頂きます。 エラーにつきましては引き続き調べてみます。 ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問