You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.9 KiB
124 lines
2.9 KiB
<?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'; |
|
} |
|
}
|
|
|