簡體   English   中英

如何使用PHP從Rackspace Cloud Files容器內的文件夾中獲取文件夾大小?

[英]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。

問題:

  1. 我想獲取在主容器(“ xyz”)下創建的特定用戶文件夾的文件夾大小。

  2. 還有其他方法可以實現用戶是否超出限制?

  1. 我想獲取在主容器(“ 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";
  1. 是否有其他方法可以實現用戶是否超出限制。

如果您對用戶的增長速度有限制,或者可以限制用戶總數,則可以考慮為每個用戶創建一個容器。 不利的一面是,您將通過每個帳戶的最大容器數(500,000)來限制可以支持的用戶數。 但這將允許您使用容器配額功能。 使用此功能,如果您嘗試放置對象且超出配額,則會收到HTTP 413響應。 您還可以通過“ X-Container-Bytes-Used”標頭檢查用戶的使用情況。

注意:我之前提到過“最終一致性窗口”。 在某些情況下,容器列表/配額可能不會立即更新,但最終會更新。 在大多數情況下,這種延遲不是很明顯,就是很小。 但是,如果您的用例要求絕對不允許用戶上傳超出其配額的文件,那么您可能必須尋找一種替代方法來跟蹤用戶的使用情況(例如本地數據庫)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM