NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Media Library for Laravel

URL, streaming a sťahovanie

Verejné médiá majú priame URL z disku — cez handle vlastníka alebo priamo na Media:

MediaLibrary::for($user)->url('avatar');          // first media's URL, the fallback, or ''
MediaLibrary::for($user)->url('avatar', 'thumb'); // first media's variant URL

$media->getUrl();          // original (public media)
$media->getUrl('thumb');   // a named variant (on the variants disk)

Súkromné a dočasné URL

Súkromné médiá verejné URL nemajú, preto použite dočasné URL: na podporujúcich diskoch (S3 a každý driver s temporaryUrl()) ho natívne podpíše, inak prejde na podpísanú streamovaciu routu Laravelu. Bez zadanej platnosti sa použije temporary_url_default_lifetime. Veľké súbory sa streamujú efektívne vrátane obnoviteľných čiastočných sťahovaní:

// Private media has no public URL — getUrl() throws. Use a temporary URL:
MediaLibrary::for($user)->temporaryUrl('avatar', expiry: now()->addMinutes(10));
$media->getTemporaryUrl(now()->addMinutes(5));
$media->getTemporaryUrl(now()->addMinutes(5), 'thumb');
// presigned on S3-like disks, or a Laravel signed streaming route on local/cold disks

return $media->toResponse($request);              // stream inline (safe types), range-aware
return $media->toDownloadResponse('invoice.pdf'); // as an attachment

Streamovacia routa

Balík zaregistruje GET {prefix}/{media}/{variant?} s názvom media.stream. {media} sa viaže podľa UUID a routa spúšťa nakonfigurovaný middleware plus middleware signed od Laravelu, ktorý sa pripojí vždy; ?download=1 v podpísanej URL vráti súbor ako prílohu. Bez platného podpisu (alebo na diskoch s natívnym podpisovaním bez podpísanej URL) routa nič nevydá:

'stream' => [
    'enabled' => true,           // register the signed streaming route
    'route_prefix' => 'media',   // URI prefix
    'middleware' => ['web'],     // Laravel's 'signed' is always appended
],

Čo sa servíruje inline

Inline sa servírujú len typy, ktoré prehliadač zobrazí bez spúšťania čohokoľvek — rastrové obrázky, audio, video, PDF a obyčajný text. HTML, SVG, XML a všetky ostatné typy sa posielajú ako príloha a každá odpoveď nesie X-Content-Type-Options: nosniff a izolujúcu Content-Security-Policy, takže uložený súbor nikdy nespustí skript na pôvode vašej aplikácie. Variant sa servíruje s typom vlastného formátu. Nečitateľná alebo viacnásobná hlavička Range sa ignoruje (celý súbor, 200); rozsah za koncom súboru dostane 416.

Súkromné médiá potrebujú súkromný disk

->private() / withVisibility('private') nastaví viditeľnosť súboru — ACL objektu v S3 alebo režim 0600 na lokálnom disku. Nezastaví však webový server, ktorý disk servíruje priamo: predvolený disk public je cez symlink pod public/storage, takže súkromný súbor uložený na ňom sa dá stiahnuť z /storage/{uuid}/{file} všade, kde webový server beží pod používateľom PHP — a uuid je v každej podpísanej URL. Súkromné skupiny držte na disku, ktorý webový server neservíruje, napríklad na disku local od Laravelu (storage/app/private) alebo v súkromnom S3 buckete:

// Keep private buckets on a disk the web server does not serve.
$this->addMediaBucket('invoices')
    ->useDisk('local')   // storage/app/private — not symlinked under public/storage
    ->private();

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.