protected function S3fsStream::convertUriToKeyedPath in S3 File System 4.0.x
Same name and namespace in other branches
- 8.3 src/StreamWrapper/S3fsStream.php \Drupal\s3fs\StreamWrapper\S3fsStream::convertUriToKeyedPath()
Converts a Drupal URI path into what is expected to be stored in S3.
Parameters
string $uri: An appropriate URI formatted like 'protocol://path'.
bool $prepend_bucket: Whether to prepend the bucket name. S3's stream wrapper requires this for some functions.
Return value
string A converted string ready for S3 to process it.
5 calls to S3fsStream::convertUriToKeyedPath()
- S3fsStream::getCommandParams in src/
StreamWrapper/ S3fsStream.php - Return bucket and key for a command array.
- S3fsStream::rename in src/
StreamWrapper/ S3fsStream.php - Support for rename().
- S3fsStream::rmdir in src/
StreamWrapper/ S3fsStream.php - Support for rmdir().
- S3fsStream::stream_open in src/
StreamWrapper/ S3fsStream.php - Opens file or URL.
- S3fsStream::unlink in src/
StreamWrapper/ S3fsStream.php - Support for unlink().
File
- src/
StreamWrapper/ S3fsStream.php, line 1513
Class
- S3fsStream
- Defines a Drupal s3 (s3://) stream wrapper class.
Namespace
Drupal\s3fs\StreamWrapperCode
protected function convertUriToKeyedPath($uri, $prepend_bucket = TRUE) {
// Remove the protocol.
$parts = explode('://', $uri);
// Remove erroneous leading or trailing, forward-slashes and backslashes.
$parts[1] = trim($parts[1], '\\/');
if (!empty($parts[1])) {
// public:// file are all placed in the s3fs_public_folder.
$public_folder = !empty($this->config['public_folder']) ? $this->config['public_folder'] : 's3fs-public';
$private_folder = !empty($this->config['private_folder']) ? $this->config['private_folder'] : 's3fs-private';
if (StreamWrapperManager::getScheme($uri) == 'public') {
$parts[1] = "{$public_folder}/{$parts[1]}";
}
elseif (StreamWrapperManager::getScheme($uri) == 'private') {
$parts[1] = "{$private_folder}/{$parts[1]}";
}
// If it's set, all files are placed in the root folder.
if (!empty($this->config['root_folder'])) {
$parts[1] = "{$this->config['root_folder']}/{$parts[1]}";
}
// Prepend the uri with a bucket since AWS SDK expects this.
if ($prepend_bucket) {
$parts[1] = $this->config['bucket'] . '/' . $parts[1];
}
}
// Set protocol to S3 so AWS stream wrapper works correctly.
$parts[0] = 's3';
return implode('://', $parts);
}