Длина метаданных и размер папки хранилища объектов Softlayer
Я пытаюсь интегрировать Softlayer Object Storage с нашим приложением PHP. Я использую API с https://github.com/softlayer/softlayer-object-storage-php.
У меня есть следующие запросы:-
- Какова максимальная длина значения для пользовательских метаданных объекта. Мне нужно было хранить дополнительную информацию об объекте в метаданных.
- Как получить размер папки, а не размер контейнера? Я вижу заголовок "X-container-bytes-used", который соответствует размеру контейнера. Но нужно получить размер папки.
Пожалуйста посоветуй. Спасибо
1 ответ
По первому вопросу: посмотрите следующую ссылку:
По второму вопросу: проводя небольшое исследование в Object Storage API v1 (ПОДДЕРЖИВАЕТСЯ), я не нашел способа узнать размер папки. Портал также не отображает размер папки.
Обходным путем будет получение всех размеров файла внутри папки с использованием PHP-клиента SoftLayer Object Storage] ( https://github.com/softlayer/softlayer-object-storage-php)
обновленный
PHP Script для получения размера папки
/**
* This method retrieves folder size
* @var $containerName - The container's name where the folder is located
* @var $folder - The folder that you wish to retrieve its size
*/
function getFolderSize($objectStorage, $containerName, $folder) {
// Get objects
$objects = $objectStorage -> with($containerName . "/") -> get() -> objects;
$size = 0;
foreach ($objects as $object) {
$objectName = explode($containerName . "/", $object -> getPath());
$folderName = explode($folder . "/", $objectName[1]);
if (sizeof($folderName) > 1) {
$sizeObject = $objectStorage -> with($containerName . "/" . $folder . "/" . $folderName[1]) -> get() -> getHeader('Content-length');
$size = $size + $sizeObject;
//print_r("\n File" . $folderName[1] . " " . $sizeObject . " Bytes (" . ($sizeObject / 1024) . " KB) Total Size Folder: " . $size . " Bytes (" . ($size / 1024) . " KB)");
}
}
return $size;
}
/**
* Declare Object Storage parameters
*/
$host = 'https://mil01.objectstorage.softlayer.net/auth/v1.0/';
// the SoftLayer Object Storage API host
$username = 'set me';
$password = 'set me';
$options = array('adapter' => ObjectStorage_Http_Client::SOCKET, 'timeout' => 10);
/**
* Creating Object Storage Object
*/
$objectStorage = new ObjectStorage($host, $username, $password, $options);
/**
* Retrieve a folder's size
*/
$size = getFolderSize($objectStorage, "rcvTest", "folderTest/folder1/subfolder1/subsubfolder1");
print_r("\n Folde Size: " . $size . " bytes " . $size / 1024 . " KB");