diff options
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFile.php')
-rw-r--r-- | vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFile.php | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFile.php b/vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFile.php new file mode 100644 index 0000000..141e66d --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFile.php @@ -0,0 +1,124 @@ +<?php + +namespace Guzzle\Http\Message; + +use Guzzle\Common\Version; +use Guzzle\Common\Exception\InvalidArgumentException; +use Guzzle\Http\Mimetypes; + +/** + * POST file upload + */ +class PostFile implements PostFileInterface +{ + protected $fieldName; + protected $contentType; + protected $filename; + protected $postname; + + /** + * @param string $fieldName Name of the field + * @param string $filename Local path to the file + * @param string $postname Remote post file name + * @param string $contentType Content-Type of the upload + */ + public function __construct($fieldName, $filename, $contentType = null, $postname = null) + { + $this->fieldName = $fieldName; + $this->setFilename($filename); + $this->postname = $postname ? $postname : basename($filename); + $this->contentType = $contentType ?: $this->guessContentType(); + } + + public function setFieldName($name) + { + $this->fieldName = $name; + + return $this; + } + + public function getFieldName() + { + return $this->fieldName; + } + + public function setFilename($filename) + { + // Remove leading @ symbol + if (strpos($filename, '@') === 0) { + $filename = substr($filename, 1); + } + + if (!is_readable($filename)) { + throw new InvalidArgumentException("Unable to open {$filename} for reading"); + } + + $this->filename = $filename; + + return $this; + } + + public function setPostname($postname) + { + $this->postname = $postname; + + return $this; + } + + public function getFilename() + { + return $this->filename; + } + + public function getPostname() + { + return $this->postname; + } + + public function setContentType($type) + { + $this->contentType = $type; + + return $this; + } + + public function getContentType() + { + return $this->contentType; + } + + public function getCurlValue() + { + // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax + // See: https://wiki.php.net/rfc/curl-file-upload + if (function_exists('curl_file_create')) { + return curl_file_create($this->filename, $this->contentType, $this->postname); + } + + // Use the old style if using an older version of PHP + $value = "@{$this->filename};filename=" . $this->postname; + if ($this->contentType) { + $value .= ';type=' . $this->contentType; + } + + return $value; + } + + /** + * @deprecated + * @codeCoverageIgnore + */ + public function getCurlString() + { + Version::warn(__METHOD__ . ' is deprecated. Use getCurlValue()'); + return $this->getCurlValue(); + } + + /** + * Determine the Content-Type of the file + */ + protected function guessContentType() + { + return Mimetypes::getInstance()->fromFilename($this->filename) ?: 'application/octet-stream'; + } +} |