php - 使用 Guzzle PHP 将文件分块上传到 URL 端点

标签 php stream guzzle6 guzzle

我想使用 guzzle 将文件分 block 上传到 URL 端点。

我应该能够提供 Content-Range 和 Content-Length header 。

使用 php 我知道我可以拆分使用

define('CHUNK_SIZE', 1024*1024); // Size (in bytes) of chunk

function readfile_chunked($filename, $retbytes = TRUE) {
    $buffer = '';
    $cnt    = 0;
    $handle = fopen($filename, 'rb');

    if ($handle === false) {
        return false;
    }

    while (!feof($handle)) {
        $buffer = fread($handle, CHUNK_SIZE);
        echo $buffer;
        ob_flush();
        flush();

        if ($retbytes) {
            $cnt += strlen($buffer);
        }
    }

    $status = fclose($handle);

    if ($retbytes && $status) {
        return $cnt; // return num. bytes delivered like readfile() does.
    }

    return $status;
}

如何使用 guzzle(如果可能的话使用 guzzle 流)以 block 的形式发送文件?

最佳答案

此方法允许您使用 guzzle 流传输大文件:

use GuzzleHttp\Psr7;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

$resource = fopen($pathname, 'r');
$stream = Psr7\stream_for($resource);

$client = new Client();
$request = new Request(
        'POST',
        $api,
        [],
        new Psr7\MultipartStream(
            [
                [
                    'name' => 'bigfile',
                    'contents' => $stream,
                ],
            ]
        )
);
$response = $client->send($request);

关于php - 使用 Guzzle PHP 将文件分块上传到 URL 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182654/

相关文章:

php - Symfony 3.4 - 将 API 流文件传输到客户端下载

php - Guzzle 6 : upload files with array data

php - jQuery:如果 DatePicker UI 更改,则更新某个文本框

php - Laradock:如何启用/安装 php7 ldap 支持扩展?

node.js - 等待完成流的读取请求

c# - 压缩和解压缩源数据给出的结果与源数据不同

php - 使用 php 更改/隐藏 WooCommerce 主页上的价格

php - 如何从 PhoneGaps 文件传输 API 检索 POST 数据

c# - 为什么 MemoryStream 不提供采用 "long"容量的构造函数?

php - Symfony 无法识别通过 Guzzle 多部分/表单数据请求上传的多个文件