Jadual Kandungan
2. Fail aliran dari penyimpanan dengan Storage::download() atau Storage::response()
Untuk dimuat turun:
Untuk melihat sebaris (misalnya, pdfs, imej):
3. Stream fail besar dengan tajuk yang betul (misalnya, video)
4. Gunakan X-Sendfile atau X-Accel-Redirect untuk prestasi yang lebih baik
Contoh dengan nginx ( X-Accel-Redirect ):
5. Data Eksport Streaming (misalnya, CSV)
Petua utama
Rumah rangka kerja php Laravel Bagaimana Mengendalikan Fail Streaming di Laravel?

Bagaimana Mengendalikan Fail Streaming di Laravel?

Aug 12, 2025 am 10:04 AM
laravel aliran fail

Gunakan tindak balas ()-> aliran () dengan penyimpanan :: readStream () untuk menstrimkan fail secara manual sambil mengelakkan keletihan ingatan; 2. Menggunakan Penyimpanan :: Muat turun () atau Penyimpanan :: Response () untuk penstriman fail secara automatik dari penyimpanan tempatan atau S3 dengan tajuk yang betul; 3. Untuk fail video, laksanakan sokongan permintaan pelbagai menggunakan BinaryFileresponse atau pakej khusus untuk membolehkan mencari; 4. Meningkatkan prestasi dengan menggunakan pengepala X-Sendfile atau X-Accel-redirect untuk membiarkan pelayan web mengendalikan fail streaming selepas pengesahan PHP; 5. Stream eksport besar seperti CSV dengan menggabungkan tindak balas ()-> stream () dengan database chunking dan fopen ('php: // output') untuk meminimumkan penggunaan memori; Sentiasa elakkan file_get_contents () dan memuatkan data dalam ketulan untuk memastikan streaming yang cekap.

Bagaimana cara mengendalikan aliran fail di Laravel?

Mengendalikan aliran fail di Laravel -terutamanya untuk fail besar seperti video, log, atau eksport -adalah penting untuk mengelakkan keletihan memori dan memberikan pengalaman pengguna yang lancar. Laravel memanfaatkan Yayasan HTTP Symfony, jadi anda boleh menstrimkan fail secara langsung dari penyimpanan (tempatan, S3, dan lain -lain) tanpa memuatkannya sepenuhnya ke dalam ingatan.

Bagaimana cara mengendalikan aliran fail di Laravel?

Inilah cara mengendalikan aliran fail dengan betul di Laravel:


1. Gunakan response()->stream() untuk streaming tersuai

Apabila anda ingin menstrimkan fail secara manual (misalnya, dari sumber jauh atau dengan logik tersuai), gunakan response()->stream() .

Bagaimana cara mengendalikan aliran fail di Laravel?
 Gunakan Illuminate \ Support \ Facades \ Storage;
Gunakan symfony \ component \ httpfoundation \ streamedResponse;

Fungsi Awam StreamFile ($ FileName)
{
    RELOW RESPONSE ()-> Stream (fungsi () menggunakan ($ filename) {
        $ stream = penyimpanan :: cakera ('tempatan')-> readStream ($ fileName);

        fpassthru ($ stream); // aliran fail ke output

        jika (is_resource ($ stream)) {
            fclose ($ stream);
        }
    }, 200, [[
        'Kandungan-jenis' => Penyimpanan :: Mimetype ($ FileName),
        'Kandungan-disposisi' => 'inline; filename = "'. $ filename.'" ',
    ]);
}

Kaedah ini membaca fail dalam ketulan, jadi ia adalah efisien memori.


2. Fail aliran dari penyimpanan dengan Storage::download() atau Storage::response()

Fasad Storage Laravel menyediakan kaedah terbina dalam untuk menstrim fail:

Bagaimana cara mengendalikan aliran fail di Laravel?

Untuk dimuat turun:

 Penyimpanan kembali :: cakera ('tempatan')-> muat turun ($ filename);

Untuk melihat sebaris (misalnya, pdfs, imej):

 Penyimpanan kembali :: cakera ('tempatan')-> respons ($ filename);

Kaedah -kaedah ini secara automatik mengendalikan tajuk dan pemindahan chunked apabila disokong oleh sistem fail yang mendasari.

⚠️ pada s3: Storage::response() dan download() berfungsi dengan lancar dan stream langsung dari AWS tanpa menyentuh memori pelayan anda.


3. Stream fail besar dengan tajuk yang betul (misalnya, video)

Untuk fail media seperti video, anda mungkin perlu menyokong permintaan julat HTTP (jadi pengguna boleh mencari dalam video).

Laravel tidak mengendalikan permintaan pelbagai dari kotak, jadi anda memerlukan pakej atau penyelesaian tersuai.

Cara mudah adalah menggunakan pakej seperti spatie/laravel-medialibrary atau secara manual melaksanakan sokongan pelbagai:

 Fungsi Awam StreamVideo ($ FileName)
{
    $ path = storage_path ('app/public/'. $ filename);

    jika (! file_exists ($ path)) {
        membatalkan (404);
    }

    $ stream = new \ symfony \ component \ httpfoundation \ binaryfileresponse ($ path);

    // Dayakan Sokongan untuk Permintaan Julat (diperlukan untuk mencari video)
    $ aliran-> menyediakan (permintaan ());

    pulangan $ aliran;
}

Sebagai alternatif, gunakan Apache/Nginx untuk menyampaikan fail secara langsung dengan tajuk X-Sendfile atau X-Accel-Redirect untuk prestasi yang lebih baik.


4. Gunakan X-Sendfile atau X-Accel-Redirect untuk prestasi yang lebih baik

Daripada PHP mengendalikan aliran, biarkan pelayan web melakukannya:

Contoh dengan nginx ( X-Accel-Redirect ):

 tindak balas pulangan ('', 200, [
    'X-accel-redirect' => '/dilindungi/'. $ nama fail,
    'Kandungan-jenis' => 'video/mp4',
]);

Konfigurasikan nginx:

 lokasi / dilindungi / {
    dalaman;
    alias/path/to/your/storage/app/dilindungi/;
}

Dengan cara ini, PHP mengesahkan permintaan itu, tetapi Nginx mengalir fail dengan cekap.


5. Data Eksport Streaming (misalnya, CSV)

Semasa menjana CSV atau laporan yang besar:

 Pengeksport fungsi awam ()
{
    $ headers = [
        'Kandungan-jenis' => 'teks/csv',
        'Kandungan-disposisi' => 'lampiran; filename = "users.csv" ',
    ];

    $ callback = function () {
        $ file = fopen ('php: // output', 'w');
        fputcsv ($ file, ['id', 'name', 'e -mel']);

        Pengguna :: Chunk (500, Fungsi ($ Pengguna) Gunakan ($ File) {
            foreach ($ pengguna sebagai pengguna $) {
                fputCsv ($ fail, [$ user-> id, $ user-> name, $ user-> e-mel]);
            }
        });

        fclose ($ fail);
    };

    tindak balas kembali ()-> stream ($ callback, 200, $ header);
}

Ini mengelakkan memuat semua pengguna ke dalam ingatan.


Petua utama

  • Sentiasa gunakan Storage::readStream() atau fopen('php://output') untuk streaming sebenar.
  • Elakkan file_get_contents() atau Storage::get() untuk fail besar.
  • Gunakan pertanyaan chunked ( chunk() ) apabila data streaming dari pangkalan data.
  • Lebih suka X-Sendfile / X-Accel-Redirect dalam pengeluaran untuk fail statik besar.
  • Uji dengan fail besar untuk memastikan penggunaan memori tetap rendah.

Pada asasnya, Laravel memberi anda alat -anda hanya perlu mengelakkan memuatkan segala -galanya ke dalam ingatan dan biarkan sungai melakukan kerja.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Fail Streaming di Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan fasih di laravel Cara menggunakan fasih di laravel Aug 21, 2025 pm 02:30 PM

Buat Model dan Migrasi: Gunakan PhPartisanMake: ModelPost-M untuk menjana model dan fail penghijrahan, menentukan struktur meja dan jalankan phpartisanmigrate; 2. Operasi CRUD Asas: Gunakan pos :: semua (), cari (), buat (), simpan () dan padam () kaedah untuk menanyakan, membuat, mengemas kini dan memadam data; 3. Gunakan persatuan yang fasih: Tentukan hubungan dan hubungan hasmany dalam model, dan gunakan kaedah dengan () untuk memperlihatkan data yang berkaitan untuk mengelakkan masalah pertanyaan n 1; 4.

Bagaimana untuk bekerja dengan enum dalam model dan migrasi Laravel? Bagaimana untuk bekerja dengan enum dalam model dan migrasi Laravel? Aug 16, 2025 am 10:29 AM

Menggunakan medan rentetan dan penghitungan PHP adalah cara terbaik untuk mengendalikan penghitungan di Laravel. 1. Gunakan medan jenis rentetan dalam penghijrahan dan secara pilihan menambah kekangan checkin; 2. Tentukan PHP enum dengan nilai sokongan rentetan (Php8.1); 3. Secara automatik menukar medan ke dalam contoh enum melalui $ cast dalam model; 4. Gunakan peraturan :: dalam (enum :: nilai ()) dalam pengesahan bentuk untuk memastikan bahawa input adalah undang -undang; 5. Gunakan enum :: kes () atau palsu ()-> enum () dalam fail kilang dan benih untuk menghasilkan data ujian; 6. Gunakan atribut nilai -> enum atau secara langsung bandingkan contoh enum apabila menanyakan. Harus

Cara membuat rangkaian sosial dengan laravel Cara membuat rangkaian sosial dengan laravel Sep 01, 2025 am 06:39 AM

Ya ya, ya, ya, ya, yapaS, yoyacreateasoiNworkWitThlyFollowingTheSestEps: 1.setuplaraveliausingcomposer, configurethe.Envfile, enNipAceAuthenticationEvheButreh/jetStream/fortifify, andRunMigrationsforUsermanGENGENGENGA

Cara bekerja dengan hubungan polimorfik di Laravel Cara bekerja dengan hubungan polimorfik di Laravel Aug 25, 2025 am 10:56 AM

Polymorphicrelationshipsinlaravelallowamodelikecommentorimagetobelongtomultiplemodelssuchaspost, video, oruserusingasingleassociation.2.Thedatabaseschemarequires {Hubungan}

Cara Menggunakan Penjadualan Tugas Laravel Cara Menggunakan Penjadualan Tugas Laravel Aug 31, 2025 am 06:07 AM

Sistem Taskscheduling Laravel membolehkan anda menentukan dan menguruskan tugas-tugas masa melalui PHP, tanpa mengedit secara manual dengan Crontab Server, anda hanya perlu menambah tugas cron yang dilaksanakan sekali seminit ke pelayan: *CD/Path-to-Your-Project && phpartisanschedule: RUN >>/null2> App \ Console \ Kernel Class; 1. Menentukan tugas boleh menggunakan kaedah perintah, panggilan atau eksekutif, seperti $ jadual-

Cara membina backend aplikasi mudah alih dengan laravel Cara membina backend aplikasi mudah alih dengan laravel Sep 02, 2025 am 08:34 AM

Menggunakan Laravel untuk membina backend mudah alih memerlukan terlebih dahulu memasang rangka kerja dan mengkonfigurasi persekitaran pangkalan data; 2. Tentukan laluan API dalam Laluan/API.PHP dan mengembalikan respons JSON menggunakan pengawal sumber; 3. Melaksanakan pengesahan API melalui Laravelsanctum untuk menjana token untuk penyimpanan dan pengesahan mudah alih; 4. Sahkan jenis fail apabila memuat naik fail dan simpannya pada cakera awam, dan buat pautan lembut untuk akses luaran; 5. Persekitaran pengeluaran memerlukan HTTPS, menetapkan had semasa, mengkonfigurasi CORS, melakukan kawalan versi API dan mengoptimumkan pengendalian ralat. Ia juga disyorkan untuk menggunakan sumber API, paging, beratur dan alat dokumen API untuk meningkatkan kebolehpercayaan dan prestasi. Gunakan Laravel untuk membina selamat,

Cara mengantarabsikasikan aplikasi Laravel Cara mengantarabsikasikan aplikasi Laravel Aug 22, 2025 pm 02:31 PM

Buat fail bahasa: Buat subdirektori untuk setiap bahasa (seperti en, es) dalam direktori sumber/lang dan tambahkan fail.php mesej, atau gunakan fail JSON untuk menyimpan terjemahan; 2. Tetapkan Bahasa Permohonan: Baca Header Permintaan Menerima bahasa melalui middleware atau mengesan bahasa melalui awalan URL, tetapkan bahasa semasa menggunakan apl ()-> setLocale (), dan daftar middleware di kernel.php; 3. Gunakan fungsi terjemahan: gunakan __ (), trans () atau @lang dalam pandangan untuk mendapatkan kandungan terjemahan, dan disyorkan untuk menggunakan __ () yang menyokong sandaran; 4.

Bagaimana cara log mesej ke fail di Laravel? Bagaimana cara log mesej ke fail di Laravel? Sep 21, 2025 am 06:04 AM

Laravelusmonologtologmessagesviathelogfacade, withdefaultlogsstoredinstorage/logs/laravel.log.configurechannelsinconfig/logging.phptocontroloutput;

See all articles