scratch

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 86  →  ?path2? @ 87
/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
@@ -0,0 +1,110 @@
<?php
 
namespace GuzzleHttp\Post;
 
use GuzzleHttp\Stream\AppendStream;
use GuzzleHttp\Stream\Stream;
use GuzzleHttp\Stream\StreamDecoratorTrait;
use GuzzleHttp\Stream\StreamInterface;
 
/**
* Stream that when read returns bytes for a streaming multipart/form-data body
*/
class MultipartBody implements StreamInterface
{
use StreamDecoratorTrait;
 
private $boundary;
 
/**
* @param array $fields Associative array of field names to values where
* each value is a string or array of strings.
* @param array $files Associative array of PostFileInterface objects
* @param string $boundary You can optionally provide a specific boundary
* @throws \InvalidArgumentException
*/
public function __construct(
array $fields = [],
array $files = [],
$boundary = null
) {
$this->boundary = $boundary ?: uniqid();
$this->stream = $this->createStream($fields, $files);
}
 
/**
* Get the boundary
*
* @return string
*/
public function getBoundary()
{
return $this->boundary;
}
 
public function isWritable()
{
return false;
}
 
/**
* Get the string needed to transfer a POST field
*/
private function getFieldString($name, $value)
{
return sprintf(
"--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n",
$this->boundary,
$name,
$value
);
}
 
/**
* Get the headers needed before transferring the content of a POST file
*/
private function getFileHeaders(PostFileInterface $file)
{
$headers = '';
foreach ($file->getHeaders() as $key => $value) {
$headers .= "{$key}: {$value}\r\n";
}
 
return "--{$this->boundary}\r\n" . trim($headers) . "\r\n\r\n";
}
 
/**
* Create the aggregate stream that will be used to upload the POST data
*/
private function createStream(array $fields, array $files)
{
$stream = new AppendStream();
 
foreach ($fields as $name => $fieldValues) {
foreach ((array) $fieldValues as $value) {
$stream->addStream(
Stream::factory($this->getFieldString($name, $value))
);
}
}
 
foreach ($files as $file) {
 
if (!$file instanceof PostFileInterface) {
throw new \InvalidArgumentException('All POST fields must '
. 'implement PostFieldInterface');
}
 
$stream->addStream(
Stream::factory($this->getFileHeaders($file))
);
$stream->addStream($file->getContent());
$stream->addStream(Stream::factory("\r\n"));
}
 
// Add the trailing boundary
$stream->addStream(Stream::factory("--{$this->boundary}--"));
 
return $stream;
}
}