Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan rangka kerja Hyperf untuk memuat turun fail

Cara menggunakan rangka kerja Hyperf untuk memuat turun fail

WBOY
WBOYasal
2023-10-21 08:23:141625semak imbas

Cara menggunakan rangka kerja Hyperf untuk memuat turun fail

Cara menggunakan rangka kerja Hyperf untuk memuat turun fail

Pengenalan:
Muat turun fail ialah keperluan biasa apabila membangunkan aplikasi web menggunakan rangka kerja Hyperf. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Hyperf untuk memuat turun fail, termasuk contoh kod khusus.

1. Persediaan
Sebelum anda mula, pastikan anda telah memasang rangka kerja Hyperf dan berjaya mencipta aplikasi Hyperf.

2. Cipta pengawal muat turun fail
Pertama, kita perlu mencipta pengawal untuk mengendalikan permintaan muat turun fail. Buka terminal, masukkan direktori akar projek Hyperf, dan laksanakan arahan berikut untuk menjana pengawal muat turun:

php bin/hyperf.php generate:controller DownloadController

Fail pengawal yang dijana terletak dalam direktori app/Controller Buka fail dan ubah suai Kaedah index() adalah seperti berikut: app/Controller目录下,打开该文件,修改index()方法如下:

<?php

declare(strict_types=1);

namespace AppController;

use HyperfHttpServerAnnotationController;
use HyperfHttpServerAnnotationRequestMapping;
use HyperfHttpMessageStreamSwooleStream;
use HyperfUtilsCodecEncode;
use HyperfUtilsCodecJson;
use HyperfUtilsCodecXml;

/**
 * @Controller
 */
class DownloadController
{
    /**
     * 下载文件
     * @RequestMapping(path="/download", methods="get")
     */
    public function index()
    {
        // 文件路径
        $file = '/path/to/file'; // 替换成实际文件路径

        // 文件名
        $filename = 'filename.ext'; // 替换成实际文件名

        // 设置响应头
        return response()
            ->header('Content-Type', 'application/octet-stream')
            ->header('Content-Disposition', 'attachment; filename=' . $filename)
            ->stream(new SwooleStream(file_get_contents($file)));
    }
}

这里我们使用response()函数创建一个响应实例,通过header()方法设置响应头,stream()方法用于发送文件内容。你需要将$file变量替换为实际的文件路径,将$filename变量替换为实际的文件名。

三、配置路由
接下来,我们需要配置一个路由来访问下载控制器。打开 config/routes.php 文件,添加如下代码:

<?php
//...
use AppControllerDownloadController;
//...
Router::get('/download', [DownloadController::class, 'index']);
//...

这样就配置好了一个GET请求的路由,当访问/download时,将会执行DownloadControllerindex方法。

四、启动服务器
启动Hyperf服务器,以监听HTTP请求。在终端中进入Hyperf项目根目录,执行以下命令:

php bin/hyperf.php start

服务器启动后,就可以通过访问http://localhost:9501/downloadrrreee

Di sini kami menggunakan fungsi response() untuk mencipta contoh respons dan menetapkan pengepala respons melalui header(), stream() digunakan untuk menghantar kandungan fail. Anda perlu menggantikan pembolehubah $file dengan laluan fail sebenar dan pembolehubah $filename dengan nama fail sebenar.


3. Konfigurasi penghalaan

Seterusnya, kita perlu mengkonfigurasi laluan untuk mengakses pengawal muat turun. Buka fail config/routes.php dan tambah kod berikut: 🎜rrreee🎜Ini akan mengkonfigurasi laluan permintaan GET Apabila mengakses /download, index kaedah kod>DownloadController. 🎜🎜4. Mulakan pelayan 🎜Mulakan pelayan Hyperf untuk mendengar permintaan HTTP. Masukkan direktori akar projek Hyperf dalam terminal dan laksanakan arahan berikut: 🎜rrreee🎜Selepas pelayan dimulakan, anda boleh memuat turun fail dengan mengakses http://localhost:9501/download. 🎜🎜Kesimpulan: 🎜Artikel ini memperkenalkan cara menggunakan rangka kerja Hyperf untuk memuat turun fail, termasuk mencipta pengawal muat turun, mengkonfigurasi penghalaan dan memulakan pelayan. Melalui kod sampel dalam artikel ini, anda boleh melaksanakan fungsi muat turun fail dengan mudah dalam projek Hyperf anda. Semoga artikel ini dapat membantu anda! 🎜

Atas ialah kandungan terperinci Cara menggunakan rangka kerja Hyperf untuk memuat turun fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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