web-dev-qa-db-ja.com

LaravelストレージファイルのパブリックURL

を使用して保存されたすべてのファイルのパブリックURLを取得したい

storage :: putFile( 'public/spares');

だから、これは私が使用している問題です

storage :: files( 'public/spares');

しかし、laravel storageディレクトリからこの出力を提供します

public/spares/image1.jpg
public/spares/image2.jpg
public/spares/image3.jpg

上記の公開リンクを取得するにはどうすればよいですか

http://localhost/laravel/public/storage/spares/image1.jpg
http://localhost/laravel/public/storage/spares/image2.jpg
http://localhost/laravel/public/storage/spares/image3.jpg

**編集**

表示するファイルの最終変更データを送信する

$docs = File::files('storage/document');
$lastmodified = [];
foreach ($docs as $key => $value) {
   $docs[$key] = asset($value);
   $lastmodified[$key] = File::lastmodified($value);
}
return view('stock.document',compact('docs','lastmodified'));

これは正しいです

7
Daniel Euchar

_Storage::url_はどうですか?ローカルストレージでも機能します。

詳細はこちらをご覧ください: https://laravel.com/docs/5.4/filesystem#file-urls

ディレクトリからすべてのファイルのURLを返したい場合、次のようなことができます:

_return collect(Storage::files($directory))->map(function($file) {
    return Storage::url($file);
})
_

ファサード以外の方法を探している場合は、Storageファサードの代わりに_\Illuminate\Filesystem\FilesystemManager_を挿入することを忘れないでください。

編集:

変更日を処理する方法は2つ(またはそれ以上)あります。

ビューにファイルを渡します。

| ouはStorage::files($directory)をビューに直接渡し、テンプレートで以下を使用できます。

_// controller:

return view('view', ['files' => Storage::files($directory)]);

// template:

@foreach($files as $file)
   {{ Storage::url($file) }} - {{ $file->lastModified }} // I'm not sure about lastModified property, but you get the point
@endforeach
_

配列を返す:

_return collect(Storage::files($directory))->map(function($file) {
     return [
         'file' => Storage::url($file),
         'modified' => $file->lastModified // or something like this
     ]
})->toArray()
_
9
Jakub Kratina

最初に、ファイルにアクセスできるように、public/storageディレクトリからstorage/app/publicディレクトリへのシンボリックリンクを作成する必要があります。あなたはそれをすることができます:

php artisan storage:link

したがって、次の方法でドキュメントを保存できます。

Storage::putFile('spares', $file);

そして、アセットとしてそれらにアクセスします:

asset('storage/spares/filename.ext');

公開ディスク上のドキュメント をチェックしてください

10
Eric Tucker

ストレージを検索する代わりに、解決策を見つけました

$ docs = Storage:files( 'public/spares');

シンボリックリンクを検索できます

$ docs = File:files( 'storage/spares');

それからasset()関数を実行して、パブリックURLを取得します。より良い解決策はありますか?

0
Daniel Euchar

私はこの質問がかなり古いことを知っていますが、laravel 5.5+

この問題を解決するには、以下のように「url」キーを追加して、ファイルシステムの構成を更新します。

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

それが役に立てば幸い :)

0
Mazino S Ukah