laravel中使用http如何分块下载大文件

我想使用http服务(底层是guzzle)分块下载文件(文件比较大,不分块可能会出错),但是没有搜到guzzle如何分块下载
以下是下载代码:

        // 下载
        $response = Http::withoutVerifying()->get($service->getDownloadUrl($this->recording));

        // 下载失败
        if (!$response->ok()) {
            return null;
        }

//        Log::info($response->header('content-disposition'));

        // 存储文件
        $file_path = 'tenant_' . tenant()->id . '/callcenter/' . date('Ymd') . '/' . Str::random(40) . '.wav';
        Storage::disk($this->disk)->put($file_path, $response->body());
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

你好,可以自行实现,HTTP定义了分块下载的技术标准,只要服务端支持即可,可以给你说下大概思路流程:
第一步:发送 HEAD 类型的探测请求,如果响应报文存在请求头 Accept-Ranges 的值为 bytes,说明服务端支持分块下载。
第二步:分块下载,指定每个块的下载偏移量,例如:curl -H "Range: bytes=0-1024" http://xxx.com -vRange: bytes=0-1024的作用是,告诉服务器本次请求我们只想获取文件0-1024(包括1024)这块内容。 第三步:合并所有临时分块,如果之前服务端响应报文有文件hash(一些服务端的分块下载支持比较完善),则最好效验一下hash

3年前 评论
VeryCool 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!