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

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

詳細はこちら
ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

JavaScript

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

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

1355閲覧

【ncmb】【Monaca】ファイルストアに画像を登録した後に公開URLを会員のフィールドに更新時、キャッシュを更新しても画像(公開URL)だけが変更がされない

todayyy

総合スコア31

ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

JavaScript

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

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2021/02/18 03:17

実現したいこと

ファイルストアに画像を登録した後に、その公開URLを会員フィールドに保存させてからキャッシュを更新してcurrentUserに取得させたいです

試したこと

errorは出てない状態です。
画像のほかに、複数のフィールドにあるテキストも更新していいるのですが、公開URL以外は反映されていました。
画像はinput fileから画像を読み込み、croppieプラグインで編集したものをblobでファイルストアに保存しているといった感じです。

画像はファイルストアに保存されていてアプリを再起動すると会員の公開URLは変更されています。
キャッシュの更新の仕方に問題があるのでしょうか?
ご回答宜しくお願い致します。

問題のコード

//ユーザー情報更新 await currentUser.update(); //キャッシュを更新 currentUser = await ncmb.User.equalTo('objectId', currentUser.objectId).fetch(); currentUser.set('sessionToken', ncmb.sessionToken) localStorage.setItem(`NCMB/${ncmb.apikey}/currentUser`, JSON.stringify(currentUser));

全体のコード

//ユーザーアイコンblob let n_user_icon_blob = my_navigator.topPage.data.i_blob; //画像が設定されている場合 if(n_user_icon_blob != undefined){ //アイコン画像が設定されていた場合、それを削除する if(currentUser.Icon != null){ //保存しているアイコン画像を削除する await ncmb.File.delete(currentUser.Icon.substr(84)); } //file input DOM var pu_user_image_input_file = document.getElementById("Pu_user_image_input_file"); //ファイルに画像がセットされている場合 if(pu_user_image_input_file.files.length === 1){ //画像が設定されていた場合、それを削除する if(currentUser.Image != null){ //保存しているアイコン加工前の画像を削除する await ncmb.File.delete(currentUser.Image.substr(84)); } //アイコン加工前の画像名 - アイコン用に切り抜く前にその元の画像を保存する var pu_user_image_name = M_change_to_base64_and_Blob_to_image_Save(pu_user_image_input_file, "user_image_"); await currentUser .set("Image"," 公開URL") } //アイコン画像の名前 var user_icon_name = "user_icon_" + currentUser.objectId + ".png" //画像アップロード await ncmb.File.upload(user_icon_name, n_user_icon_blob); //画像をユーザーアイコンに保存 await currentUser .set("Icon", "公開URL") } //名前DOM var pu_user_name_input = document.getElementById("Pu_user_name_input"); //ふりがなDOM var pu_user_furigana_input = document.getElementById("Pu_user_furigana_input"); //部署DOM var pu_duv_input = document.getElementById("Pu_duv_input"); //紹介文DOM var pu_profile_textarea = document.getElementById("Pu_profile_textarea"); //名前が変わってたら更新 if(pu_user_name_input.value != currentUser.Name){ await currentUser.set("Name", pu_user_name_input.value); } //ふりがなが変わってたら更新 if(pu_user_furigana_input.value != currentUser.Furigana){ await currentUser.set("Furigana", pu_user_furigana_input.value); } //部署が変わってたら更新 if(pu_duv_input.value != currentUser.Division){ await currentUser.set("Division", pu_duv_input.value); } //紹介文が変わってたら更新 if(pu_profile_textarea.value != currentUser.Profile){ await currentUser.set("Profile", pu_profile_textarea.value); } //ユーザー情報更新 await currentUser.update(); //キャッシュを更新 currentUser = await ncmb.User.equalTo('objectId', currentUser.objectId).fetch(); currentUser.set('sessionToken', ncmb.sessionToken) localStorage.setItem(`NCMB/${ncmb.apikey}/currentUser`, JSON.stringify(currentUser)); //戻る my_navigator.popPage();

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

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

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

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

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

guest

回答1

0

自己解決

画像更新時にアイコン画像の名前が同じだったのが原因だと分かったので、moment.jsで現時刻を取得して名前に入れることで解決しました。
全体のソースコードです。

javascript

1 //ボタンを押せないようにする - 二度押し禁止 2 button.disabled = true; 3 4 //ユーザーアイコンblob 5 let n_user_icon_blob = my_navigator.topPage.data.i_blob; 6 //画像が設定されている場合 7 if(n_user_icon_blob != undefined){ 8 9 //アイコン画像が設定されていた場合、それを削除する 10 if(currentUser.Icon != null){ 11 //保存しているアイコン画像を削除する 12 await ncmb.File.delete(currentUser.Icon.substr(84)); 13 } 14 15 //file input DOM 16 var pu_user_image_input_file = document.getElementById("Pu_user_image_input_file"); 17 //ファイルに画像がセットされている場合 18 if(pu_user_image_input_file.files.length === 1){ 19 20 //画像が設定されていた場合、それを削除する 21 if(currentUser.Image != null){ 22 //保存しているアイコン加工前の画像を削除する 23 await ncmb.File.delete(currentUser.Image.substr(84)); 24 } 25 26 //アイコン加工前の画像名 - アイコン用に切り抜く前にその元の画像を保存する 27 var pu_user_image_name = M_change_to_base64_and_Blob_to_image_Save(pu_user_image_input_file, "user_image_"); 28 await currentUser 29 .set("Image", "https://mbaas.api.nifcloud.com/2013-09-01/applications/" + appId + "/publicFiles/" + pu_user_image_name); 30 } 31///////////////////変更///////////////////////// 32 //現時刻テキスト 33 var pu_time = moment().format("YYYY_M_D_H_m_s_MM"); 34 //アイコン画像の名前 35 var user_icon_name = "user_icon_" + currentUser.objectId + pu_time + ".png" 36///////////////////////////////////////////////////////// 37 //画像アップロード 38 await ncmb.File.upload(user_icon_name, n_user_icon_blob); 39 40 //画像をユーザーアイコンに保存 41 await currentUser 42 .set("Icon", "https://mbaas.api.nifcloud.com/2013-09-01/applications/" + appId + "/publicFiles/" + user_icon_name); 43 } 44 45 46 47 //名前DOM 48 var pu_user_name_input = document.getElementById("Pu_user_name_input"); 49 //ふりがなDOM 50 var pu_user_furigana_input = document.getElementById("Pu_user_furigana_input"); 51 //部署DOM 52 var pu_duv_input = document.getElementById("Pu_duv_input"); 53 //紹介文DOM 54 var pu_profile_textarea = document.getElementById("Pu_profile_textarea"); 55 56 //名前が変わってたら更新 57 if(pu_user_name_input.value != currentUser.Name){ 58 await currentUser.set("Name", pu_user_name_input.value); 59 } 60 //ふりがなが変わってたら更新 61 if(pu_user_furigana_input.value != currentUser.Furigana){ 62 await currentUser.set("Furigana", pu_user_furigana_input.value); 63 } 64 //部署が変わってたら更新 65 if(pu_duv_input.value != currentUser.Division){ 66 await currentUser.set("Division", pu_duv_input.value); 67 } 68 //紹介文が変わってたら更新 69 if(pu_profile_textarea.value != currentUser.Profile){ 70 await currentUser.set("Profile", pu_profile_textarea.value); 71 } 72 73 //ユーザー情報更新 74 await currentUser.update(); 75 76 //キャッシュを更新 77 currentUser = await ncmb.User.equalTo('objectId', currentUser.objectId).fetch(); 78 currentUser.set('sessionToken', ncmb.sessionToken) 79 localStorage.setItem(`NCMB/${ncmb.apikey}/currentUser`, JSON.stringify(currentUser)); 80 81 //ボタン解除 82 button.disabled = false; 83 //戻る 84 my_navigator.popPage(); 85 86 //アカウントページ更新 87 Ac_reload();

投稿2021/02/18 09:46

todayyy

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問