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

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

詳細はこちら
Vue.js

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

1608閲覧

S3にアップしたファイルを、URLの有無によって表示、非表示を切り替える

Take.Y

総合スコア12

Vue.js

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2021/03/16 01:06

編集2021/03/16 01:24

いつもお世話になっております。
Vue.js / Laravel / AWS を用いてポートフォリオ作成しています。
URLの存在有無によって表示を切り分けたいのですが、うまくいかないのでご教授いただきたいです。

#実装したいこと

① Vue側から音声をアップロード(済)
② 投稿詳細ページで音声を取得し、audio タグを使って再生(未実装)
④ 音声がアップロードされてない場合にはaudioタグを非表示にする(済)

といった具合です。

#具体的な手順と該当のコード

① 音声ファイルに該当するURLを取得(コンソールにて取得確認済)

エラーコードで処理を切り分けて、URLが取得できる時(音声がアップされてる時)はURLを後述の mp3_url に代入。取得できない時は null を代入。

vue

1async mounted() { 2 this.response = await axios.get("https://post.s3-ap-northeast-1.amazonaws.com/local/"+this.username+"/"+this.$route.params['postId']+".mp3") 3 .then((res) => { 4 return res; 5 }, this); 6 if (this.response.status === 403) { 7 console.log("エラー!"); 8 this.mp3_url = null; 9 console.log(this.mp3_url); 10 } else { 11 console.log("取得した"); 12 this.mp3_url = this.response.config.url; 13 console.log(this.mp3_url); 14 } 15 },

② 取得したURLを data ()内の mp3_url に代入

vue

1data() { 2 return { 3 mp3_url: "" 4 }; 5 },

③ audio タグで音声を取得

v-if を使い null の場合にはaudioタグが表示されないようにする。

vue

1<audio 2 v-if="mp3_url!==null" 3 id="audio" 4 controls 5 :src="mp3_url" 6/>

#発生してる問題

URLが取得できた際に audio タグが表示されるのですが、音声が再生されません。
エラーが出て null を代入したときに表示されないようにするのは確認できてます。

イメージ説明

ちなみにですが、

vue

1this.mp3_url = "https://www.ne.jp/asahi/music/myuu/wave/menuettm.mp3";

先程のURL取得処理でelse以下で上記のように全く関係ないURLを代入した際には問題なく再生されます。
ですが、該当するURLの取得はコンソールで確認できてるので、どこに修正を加えれば良いかわからず、お手上げ状態です。

皆様のお知恵をお借りしたいです。
どうかよろしくお願い致します。

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

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

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

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

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

tabuu

2021/03/16 23:56

S3から取得したURLをブラウザのアドレス欄に貼り付けたら音声は再生されますか? 実際に生成されたHTML上のaudioタグはどのようになっていますか?
Take.Y

2021/03/17 01:16 編集

tabuu 様 ご返答ありがとうございます。 > 取得したURLをブラウザのアドレス欄に貼り付けたら音声は再生されますか? 該当するファイルがダウンロードされ、再生できます。 > HTML上のaudioタグ こちらは特に問題なく取得できています。
tabuu

2021/03/17 06:42

>該当するファイルがダウンロードされ、再生できます。 ブラウザ上で直接再生されないですか? Chromeの開発者ツールでレスポンスヘッダーのContentTypeを確認してみてください。 「audio/mpeg」等になっていますか?
Take.Y

2021/03/17 23:15

> ブラウザ上で直接再生されないですか? ブラウザでは再生されず、ダウンロードしてから再生できる状態になります。 > レスポンスヘッダーのContentType 該当URLを貼り付けた際に出てくるレスポンスヘッダーのContentTypeには binary/octet-stream と記載されています。
guest

回答1

0

ベストアンサー

S3にアップロードする際にContentTypeをaudio/mpegに設定すれば大丈夫と思います。
(ContentTypeは実際のファイルタイプに合わせてください)

投稿2021/03/17 23:25

tabuu

総合スコア2471

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

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

Take.Y

2021/03/18 22:50

確認してみたところ ContentType の指定でうまくいきました! お騒がせいたしました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問