国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman有類似于workerman的大文件下載方案嗎?

witersen

1、背景

在用webman做http接口服務(wù),開發(fā)一款前后端分離的應(yīng)用

2、描述:

要實現(xiàn):用戶通過接口下載文件的功能,經(jīng)測試通過下面的方法的可以進(jìn)行下載:

```php
<?php

namespace app\controller;

use support\Request;

Class DownloadRep{
    //下載備份文件
    public function DownloadRepBackup(Request $request)
    {
        $filePath = "...";
        return response()->download($filePath);
    }
}

3、問題

現(xiàn)在要實現(xiàn)大文件下載,可能是上百M,看到論壇有提供下面的下載方式,想請問在上述控制器的任何一個方法內(nèi)能拿到$connection對象來使用嗎?對文檔提供的回調(diào)函數(shù)的用法不是很理解。
(或者說在webman的控制器的函數(shù)中如何使用$conection對象(即TcpConnection實例))

<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';

$worker = new Worker('http://0.0.0.0:4236');
$worker->onMessage = function($connection, $data)
{
    if($_SERVER == '/favicon.ico')
    {
        return $connection->send("HTTP/1.0 404 Not Found\r\nContent-Length: 0\r\n\r\n", true);
    }
    // 這里發(fā)送的是一個大的pdf文件,如果是其它格式的文件,請修改下面代碼中http頭
    send_file($connection, "/your/path/xxx.pdf");
};

function send_file($connection, $file_name)
{
    if(!is_file($file_name))
    {
        $connection->send("HTTP/1.0 404 File Not Found\r\nContent-Length: 18\r\n\r\n404 File Not Found", true);
        return;
    }

    // ======發(fā)送http頭======
    $file_size = filesize($file_name);

    //省略...

    $connection->onBufferDrain = function($connection)use($do_write)
    {
        $connection->bufferFull = false;
        $do_write();
    };
    // 執(zhí)行發(fā)送
    $do_write();
}
Worker::runAll();
2760 3 0
3個回答

walkor 打賞

直接用 response()->download() 就行

  • witersen 2022-05-06

    感謝解答。可是我現(xiàn)在無論使用 response()->download() 還是 response()->file() 還是 response()->withFile() ,前端的下載都會卡在不超過2M的時候,下載沒有結(jié)束沒有報錯但是就是一直下載加載中,我用前端的請求方法請求另外的文件下載接口,就可以正常下載,請問是否為webman哪里的配置信息需要更改嗎?

  • walkor 2022-05-06

    我這測試正常。測試代碼

    <?php
    
    namespace app\controller;
    
    use support\Request;
    
    class Index
    {
        public function index(Request $request)
        {
            return response('')->download(public_path(). '/1.zip');
        }
    }

    1.zip 大概10M

    webman不支持使用使用$connection對象,不過你可以在webman里自定義進(jìn)程,webman自定義進(jìn)程和workerman使用起來幾本沒有區(qū)別

  • witersen 2022-05-06

    非常感謝walkor,我繼續(xù)探索下自定義進(jìn)程的用法

  • zhaohanfeng 2022-07-27

    下載文件大于2M左右就出現(xiàn)網(wǎng)絡(luò)錯誤,在linux服務(wù)器下還是存在

  • evilk 2022-07-27

    需要更新 PHP 和 ngin 相關(guān)配置才行

  • zfxcms 2022-08-15

    能把數(shù)據(jù)流放在file()方法里面嗎?因為我上傳的時候加密了,得解密后把數(shù)據(jù)流發(fā)送到客戶端

doit

請問有無實現(xiàn)方案?

  • 暫無評論
楚羽幽

老哥,你這個找到解決辦法了嗎? 我也是遇到了這個問題
http://wtbis.cn/q/10320

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??