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

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

新規登録して質問してみよう
ただいま回答率
85.50%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

1341閲覧

【laravel】Jqueryでstorage_pathを設定したところ、引数箇所以外がスラッシュで分割されない

退会済みユーザー

退会済みユーザー

総合スコア0

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/01/23 09:18

編集2018/01/23 09:46

##わからないこと
いつもお世話になっております。
この度Jqueryにてstorage_pathを用いてURLの生成をしようとしたのですが、下記のようにスラッシュのないパスが生成されました。

「X:wwwlaravelstorageapp/public/cv/555/rere.jpg」

本来であれば、

「X:/www/laravel/storage/app/public/cv/555/rere.jpg」

となるはずなんですが・・・。
コードは以下になります。

var id = 555; var filename = 'rere.jpg'; var imgUrl = '{!!storage_path("app/public/cv/' + id + '/' + fileName + '/")!!}';

また、
「Not allowed to load local resource: file:///」と、上記のローカルファイルへのアクセスもできない状況です。
二つの問題が関連しているか微妙ですが、ご教授いただければ幸いです。

何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

app/public/以下のリンクURLを取得するにはurl()を使います。storage_path()で得られるのは、URLではなくファイルパスです。

JavaScript

1var imgUrl = '{!!url("cv/' + id + '/' + fileName + '/")!!}';

なお、storage_pathで得た文字列から/が消えていることについてですが、おそらくstorage_pathが返すパスの区切り文字が/ではなく\になっているからです。JavaScript上に\を書けば、それはエスケープシーケンスとしてみなされ、特別な文字になります。引数部分の/が消えないのは/と明示的に書いているからです。

storage/app/publicphp artisan storage:linkを実行することで、public/storageとしてシンボリックリンクが生成されます。その後はStorage::url()でURLが得られます。

PHP

1var imgUrl = '{!!Storage::url("cv/' + id + '/' + fileName + '/")!!}';

追記

Laravel5.1のころにはphp artisan storage:linkStorage::url()も存在しないようなので、以下の方法を試してみてください。(やったことないので動作は保証できません。要検証です)

# storage/app/publicのシンボリックリンクをpublic内に作る # Windowsの場合 mklink /d "public/storage" "storage/app/public" # Linux系の場合 ln -s storage/app/public public/storage

PHP

1var imgUrl = '{!!url("storage/cv/' + id + '/' + fileName + '/")!!}';

投稿2018/01/23 10:00

編集2018/01/24 04:41
masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2018/01/23 10:05

ご回答ありがとうございます。 大変申し訳ございませんが、画像ファイルまでのパスを辿りたいのですが、その場合ですとstorage_pathを用いなければならないと思うのですが、いかがでしょうか また誤った表現を使い、誤解を招いてしまい申し訳ありません。
masaya_ohashi

2018/01/23 10:14

パスをたどるのはstorage_pathで合っていますが、ブラウザに「ファイルパス」を渡してもアクセスできません。ファイルパスをブラウザに渡しても、セキュリティ上アクセス不可です。ブラウザがアクセス可能なのはApache等を経由して得られる情報であり、Laravelのpublic以下に入っているファイルであればurlメソッドで得られるURLでアクセス可能です。
退会済みユーザー

退会済みユーザー

2018/01/23 10:36

なるほど! ただ、画像ファイルの格納場所ですが、「storage/app/public/cv...」内にありまして、ご指摘内容を反映させたところ、そのパスを辿ることができませんでした。
masaya_ohashi

2018/01/23 10:49

app/publicだけを見てそれがstorageフォルダ内であることを見落としていました。追記した部分で解決されるかと思います。
退会済みユーザー

退会済みユーザー

2018/01/23 10:50

申し訳ございません。 laravel5.1なのでstorage:linkが利用できないかと思います・・・
退会済みユーザー

退会済みユーザー

2018/01/24 00:35

はい、windowsです
退会済みユーザー

退会済みユーザー

2018/01/24 01:25

ありがとうございます。 ちなみにですが、laravelを用いなくとも構いませんので、ほかに手段は存在しないのでしょうか?
masaya_ohashi

2018/01/24 01:43

> laravelを用いなくとも構いませんので、ほかに手段は存在しないのでしょうか? この質問の意図がよくわかりません。どういう目的に対しての質問ですか?ブラウザで画像を表示することが目的ですか?また、これを聞いてきたのは私の追記した回答では動作しなかったということですか?
退会済みユーザー

退会済みユーザー

2018/01/24 02:20

Apache環境でも同様の処理で対処をしたく思いまして、こちらの処理が完全にWindowsでのみ行うものであればそれぞれで対処の仕方が異なるかと思ったためです。
退会済みユーザー

退会済みユーザー

2018/01/24 02:24

追記です 「mklink /D storage/app/public public/storage」を試みたのですが、「app」にて無効なスイッチです と表示されてしまいました。 ディレクトリ内には確かに「app」は存在するのですが・・・
masaya_ohashi

2018/01/24 02:34

すみません、mklinkの引数の順番が逆でした。また、Linux環境でのシンボリックリンク作成も書きました。
退会済みユーザー

退会済みユーザー

2018/01/24 03:42

ありがとうございます ただそれでも「無効なスイッチです」とエラーがでてしまいます
masaya_ohashi

2018/01/24 04:02

/Dを/dに変えてみてもらえますか?
退会済みユーザー

退会済みユーザー

2018/01/24 04:04

申し訳ございません、結果は同じでした
masaya_ohashi

2018/01/24 04:10 編集

dir storage/app と、dir publicの結果を貼ってみてください。
退会済みユーザー

退会済みユーザー

2018/01/24 04:29

「storage/app」 パラメーターの形式が誤っています - "pp" 「public」 ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は です C:\X_DRIVE\laravel\public のディレクトリ 2018/01/24 12:41 <DIR> . 2018/01/24 12:41 <DIR> .. 2018/01/19 18:17 2,633 .htaccess 2018/01/20 14:50 <DIR> css 2017/07/18 17:39 15,086 favicon.ico 2017/07/18 17:39 <DIR> fonts 2017/12/14 16:33 <DIR> img 2017/07/24 15:02 1,786 index.php 2018/01/20 14:50 <DIR> js 2018/01/19 17:58 307 robots.txt 2017/12/11 20:45 29,221 sitemap.xml 2017/10/26 11:02 <DIR> vendor となっておりました
masaya_ohashi

2018/01/24 04:36

dir "storage/app" これならどうですか?
退会済みユーザー

退会済みユーザー

2018/01/24 04:38 編集

できました! 「C:\X_DRIVE\laravel\storage\app のディレクトリ」
masaya_ohashi

2018/01/24 04:40

あー…つまり/aがスイッチ扱いになってるんですね…mac使ってるので気付きませんでした。コマンド修正します。
退会済みユーザー

退会済みユーザー

2018/01/24 04:46

ありがとうございます ただ、こちら側の問題で使っているPCを管理者権限で用いることができません。 そのため、シンボリックリンクを作成することができません・・・
masaya_ohashi

2018/01/24 04:51

…うーん…apacheの設定等で強引にルーティングすればできなくはなさそうですが、私はapacheの細かい設定は明るくないので私には答えることができません。
退会済みユーザー

退会済みユーザー

2018/01/24 05:47

長時間にわかりお答えくださり、誠にありがとうございます。 こちらとしては、ajaxにて保存した画像を、その保存先のファイルを辿って表示させようとしていました。 それを行いたい理由は、画像を表示させるポップアップを閉じても再度そのポップアップを表示させれば、再び画像もサムネイルで表示できるようにしたかったためです。
masaya_ohashi

2018/01/24 05:58

強引にやるなら/storageというパスに対してコントローラを割り当てて、以降のURLをパラメータとして認識し、コントローラのレスポンスで画像ファイルを返すようにしたら擬似的に可能かもしれません。まあ、apacheでやるより余計に面倒かもしれませんけど…
masaya_ohashi

2018/01/24 07:52

管理者権限がないとのことですが、vagrant等の仮想環境を入れることはできないのでしょうか?windowsの中にlinuxのマシンを擬似的に生成するもので、linux内であればrootユーザとしてなんでも出来るようになりますし、本番環境とOSを揃えることもできます。
退会済みユーザー

退会済みユーザー

2018/01/24 08:10

以前検討したことがありますが、PCのスペックで不可能だった経験があります・・・(20G要するため)
退会済みユーザー

退会済みユーザー

2018/01/24 08:11

今回のケースではstorageに格納するのではなく、publicディレクトリに入れる対処をしました。 ただ、現状では画像をサムネイルで表示ができておりませんが・・・
masaya_ohashi

2018/01/24 08:21

> ただ、現状では画像をサムネイルで表示ができておりませんが・・・ そこは我々のあずかり知らぬ範囲ですので、ご自分でご検証ください…
退会済みユーザー

退会済みユーザー

2018/01/24 08:31

はい、この度はご助力いただきありがとうございました。
guest

0

storage/app/public
を外部公開用とする意図であれば、ドキュメント通りに、
Laravel 5.5 ファイルストレージ
publicフォルダにシンボリックコマンドを張るコマンドを実行し、

php artisan storage:link

ストレージデータのURLを生成するメソッドの利用を検討して下さい。

Storage::url('file1.jpg');

投稿2018/01/23 10:40

編集2018/01/23 10:41
aro10

総合スコア4106

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

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

退会済みユーザー

退会済みユーザー

2018/01/24 00:39

ご回答ありがとうございます。 お伝えしておらず申し訳ございませんが、laravelのバージョンが5.1のためstorage:linkを実行することができません
aro10

2018/01/24 04:19

storage:linkコマンドの中身は、単純にシンボリックを張るだけなので、 5.1でもコードをコピーして新しいコマンドを作成するか、 [StorageLinkCommand.php](https://github.com/laravel/framework/blob/bd352a0d2ca93775fce8ef02365b03fc4fb8cbb0/src/Illuminate/Foundation/Console/StorageLinkCommand.php) 自身でシンボリックリンクを作成すれば良いかと思います。 [【 ln 】 ファイルやディレクトリにリンクを張る](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230812/?rt=nocnt)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問