[英]How to get folder size from folder inside Rackspace Cloud Files container using PHP?
基本上,我在Rackspace Cloud Files中創建了一個容器,可以說work
。 在work
我有很多按用戶名命名的文件夾(隨着新用戶注冊並分配1 GB空間,動態文件夾)。 每次用戶上傳文件時,我都想在允許他上傳之前檢查用戶是否超出了限制。 我正在使用Laravel PHP框架以及Rackspace開放雲SDK。
問題:
我想獲取在主容器(“ xyz”)下創建的特定用戶文件夾的文件夾大小。
還有其他方法可以實現用戶是否超出限制?
- 我想獲取在主容器(“ xyz”)下創建的特定用戶文件夾的文件夾大小。
在執行容器列表時,可以提供“前綴”和“格式”查詢參數,以僅返回以特定前綴(在您的情況下為用戶名)開頭的對象,並以JSON / XML格式返回結果。 當以JSON或XML返回結果時,結果將包含有關對象的其他信息。 以下是JSON響應示例:
[
{
"bytes": 13,
"content_type": "text/plain",
"hash": "8ddd8be4b179a529afa5f2ffae4b9858",
"last_modified": "2015-01-27T00:08:44.671230",
"name": "<username>/some_object.txt"
},
...
]
注意:使用此解決方案,如果您獲得了1萬個對象,則需要使用“標記”查詢參數來分頁結果。
另外,您可能會考慮將用戶分片到多個容器中。 我們建議您這樣做,以幫助獲得有關最終一致性窗口(稍后會詳細介紹)的更准確的結果。 例如,創建容器“ work_0”到“ work_9999”,並確定哪些用戶轉到哪個容器,其內容類似於以下內容:
$user_md5 = md5($username);
// Only use part of the md5sum, unless you have support for big (128-bit) integers
$user_int = hexdec(str_split($user_md5, 7)[0]);
$container_id = $user_int % 10000;
$container_name = "work_$container_id";
print "Container for user \"$username\" is \"$container_name\"\n";
- 是否有其他方法可以實現用戶是否超出限制。
如果您對用戶的增長速度有限制,或者可以限制用戶總數,則可以考慮為每個用戶創建一個容器。 不利的一面是,您將通過每個帳戶的最大容器數(500,000)來限制可以支持的用戶數。 但這將允許您使用容器配額功能。 使用此功能,如果您嘗試放置對象且超出配額,則會收到HTTP 413響應。 您還可以通過“ X-Container-Bytes-Used”標頭檢查用戶的使用情況。
注意:我之前提到過“最終一致性窗口”。 在某些情況下,容器列表/配額可能不會立即更新,但最終會更新。 在大多數情況下,這種延遲不是很明顯,就是很小。 但是,如果您的用例要求絕對不允許用戶上傳超出其配額的文件,那么您可能必須尋找一種替代方法來跟蹤用戶的使用情況(例如本地數據庫)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.