Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
2.1 kB · 96 lines
PHP
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697<?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, ); }
}