Changeset View
Changeset View
Standalone View
Standalone View
src/aphront/multipartparser/AphrontMultipartPart.php
- This file was added.
| <?php | |||||
| final class AphrontMultipartPart extends Phobject { | |||||
| private $headers = array(); | |||||
| private $value = ''; | |||||
| private $name; | |||||
| private $filename; | |||||
| private $tempFile; | |||||
| private $byteSize = 0; | |||||
| public function appendRawHeader($bytes) { | |||||
| $parser = id(new AphrontHTTPHeaderParser()) | |||||
| ->parseRawHeader($bytes); | |||||
| $header_name = $parser->getHeaderName(); | |||||
| $this->headers[] = array( | |||||
| $header_name, | |||||
| $parser->getHeaderContent(), | |||||
| ); | |||||
| if (strtolower($header_name) === 'content-disposition') { | |||||
| $pairs = $parser->getHeaderContentAsPairs(); | |||||
| foreach ($pairs as $pair) { | |||||
| list($key, $value) = $pair; | |||||
| switch ($key) { | |||||
| case 'filename': | |||||
| $this->filename = $value; | |||||
| break; | |||||
| case 'name': | |||||
| $this->name = $value; | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| return $this; | |||||
| } | |||||
| public function appendData($bytes) { | |||||
| $this->byteSize += strlen($bytes); | |||||
| if ($this->isVariable()) { | |||||
| $this->value .= $bytes; | |||||
| } else { | |||||
| if (!$this->tempFile) { | |||||
| $this->tempFile = new TempFile(getmypid().'.upload'); | |||||
| } | |||||
| Filesystem::appendFile($this->tempFile, $bytes); | |||||
| } | |||||
| return $this; | |||||
| } | |||||
| public function isVariable() { | |||||
| return ($this->filename === null); | |||||
| } | |||||
| public function getName() { | |||||
| return $this->name; | |||||
| } | |||||
| public function getVariableValue() { | |||||
| if (!$this->isVariable()) { | |||||
| throw new Exception(pht('This part is not a variable!')); | |||||
| } | |||||
| return $this->value; | |||||
| } | |||||
| public function getPHPFileDictionary() { | |||||
| if (!$this->tempFile) { | |||||
| $this->appendData(''); | |||||
| } | |||||
| $mime_type = 'application/octet-stream'; | |||||
| foreach ($this->headers as $header) { | |||||
| list($name, $value) = $header; | |||||
| if (strtolower($name) == 'content-type') { | |||||
| $mime_type = $value; | |||||
| break; | |||||
| } | |||||
| } | |||||
| return array( | |||||
| 'name' => $this->filename, | |||||
| 'type' => $mime_type, | |||||
| 'tmp_name' => (string)$this->tempFile, | |||||
| 'error' => 0, | |||||
| 'size' => $this->byteSize, | |||||
| ); | |||||
| } | |||||
| } | |||||