Загрузить файл кусками в конечную точку URL с помощью Guzzle PHP
Я хочу загружать файлы кусками в конечную точку URL с помощью жадности.
Я должен быть в состоянии предоставить заголовки Content-Range и Content-Length.
Используя 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;
}
Как мне добиться отправки файлов в чанке с помощью жадности, если это возможно, с использованием потоков жадности?
2 ответа
Этот метод позволяет передавать большие файлы, используя потоки жадности:
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);
Просто используйте multipart
тип кузова, как описано в документации. Затем cURL выполняет внутреннее чтение файла, поэтому вам не нужно реализовывать chunked read самостоятельно. Также все необходимые заголовки будут настроены с помощью Guzzle.