Skip to content

Commit

Permalink
Merge 9899cbd into ba5d824
Browse files Browse the repository at this point in the history
  • Loading branch information
Pato05 committed Jul 13, 2020
2 parents ba5d824 + 9899cbd commit 8c243eb
Showing 1 changed file with 22 additions and 7 deletions.
29 changes: 22 additions & 7 deletions src/Body/FormBody.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,21 @@ public function addFiles(array $data, string $contentType = 'application/octet-s
}
}

/**
* Add a file field to the form from a string.
*
* @param string $name
* @param string $fileContent
* @param string $fileName
* @param string $contentType
*/
public function addFileFromString(string $name, string $fileContent, string $fileName, string $contentType = 'application/octet-stream'): void
{
$this->fields[] = [$name, $fileContent, $contentType, $fileName];
$this->isMultipart = true;
$this->resetCache();
}

/**
* Returns an array of fields, each being an array of [name, value, content-type, file-name|null].
* Both fields and files are returned in the array. Files use a FileBody object as the value. The file-name is
Expand Down Expand Up @@ -135,8 +150,8 @@ private function getMultipartFieldArray(): array

/** @psalm-suppress PossiblyNullArgument */
$fields[] = $field instanceof FileBody
? $this->generateMultipartFileHeader($name, $fileName, $contentType)
: $this->generateMultipartFieldHeader($name, $contentType);
? $this->generateMultipartFileHeader($name, $fileName, $field, $contentType)
: $this->generateMultipartFieldHeader($name, $field, $contentType);

$fields[] = $field;
$fields[] = "\r\n";
Expand All @@ -147,23 +162,23 @@ private function getMultipartFieldArray(): array
return $this->cachedFields = $fields;
}

private function generateMultipartFileHeader(string $name, string $fileName, string $contentType): string
private function generateMultipartFileHeader(string $name, string $fileName, FileBody $field, string $contentType): string
{
$header = "Content-Disposition: form-data; name=\"{$name}\"; filename=\"{$fileName}\"\r\n";
$header .= "Content-Type: {$contentType}\r\n";
$header .= "Content-Length: " . \Amp\Promise\wait($field->getBodyLength()) . "\r\n";
$header .= "Content-Transfer-Encoding: binary\r\n\r\n";

return $header;
}

private function generateMultipartFieldHeader(string $name, string $contentType): string
private function generateMultipartFieldHeader(string $name, string $content, string $contentType): string
{
$header = "Content-Disposition: form-data; name=\"{$name}\"\r\n";
if ($contentType !== "") {
$header .= "Content-Type: {$contentType}\r\n\r\n";
} else {
$header .= "\r\n";
$header .= "Content-Type: {$contentType}\r\n";
}
$header .= "Content-Length: " . strlen($content) . "\r\n\r\n";

return $header;
}
Expand Down

0 comments on commit 8c243eb

Please sign in to comment.