簡體   English   中英

如何使用PHP在S3存儲桶中創建文件夾

[英]How to create a folder within S3 bucket using PHP

我正在嘗試在S3亞馬遜存儲桶中創建一個文件夾,但是我發現很難找到合適的文檔來充分解釋所需的內容。 我有以下用於創建文件夾的代碼/偽代碼。 任何人都可以解釋或提供我需要放在代碼中的參數示例

use vendor\aws\S3\S3Client;

$bucket_url = 'https://***.amazonaws.com/***/';
$folder_name = $username . '/';

$s3Client = new vendor\aws\S3\S3Client([
        'version' => AWS_VERSION,
        'region' => AWS_REGION,
        'credentials' => [
            'key' => AWS_KEY,
            'secret' =>AWS_SECRET,
        ],
    ]);

    $s3Client->putObject(array(
        'Bucket' => AWS_BUCKET, // Defines name of Bucket
        'Key' => AWS_PATH . $folder_name, //Defines Folder name
        'Body' => "",
    ));

Amazon S3確實沒有目錄

在Amazon S3中,存儲桶和對象是主要資源,對象存儲在存儲桶中。 Amazon S3具有扁平結構,沒有層次結構,就像在典型文件系統中看到的那樣。 但是,為了簡化組織,Amazon S3控制台支持文件夾概念作為對對象進行分組的一種方式。 Amazon S3通過使用對象的鍵名前綴來做到這一點。

而是根據對象密鑰的名稱來偽造它。 只需使用諸如some/directory/file.txt類的鍵上載對象,許多工具(包括AWS控制台中的S3界面)就可以像在一個名為some directory中的directory directory中擁有一個名為file.txt的對象一樣。

另請參閱Amazon S3 boto-如何創建文件夾?

Amazon S3沒有文件夾的概念。 對於S3,所有對象只是帶有數據的鍵名。

文件夾是人類的概念,它使用'/'字符分隔文件夾。 但是S3不在乎。

當您使用許多第三方工具(甚至是AWS管理控制台)時,這些工具通常會查看前綴下的對象鍵,並且在其中看到“ /”時會將其解釋為文件夾。

但是無法“創建文件夾”。

如果你只是PutObject與您所需的完整路徑鍵的對象(例如,“我的/所需/文件夾/結構/ file.txt的”),亞馬遜S3將會把它放在那里。 與創建文件之前必須存在文件夾的文件系統不同。

與“創建文件夾”最接近的事情是創建一個0字節的對象,該對象的鍵末尾帶有'/'。 例如“ my / desired / folder / structure /”。 但這只是桶中的另一個對象。 它不會對存儲桶或存儲桶中的任何其他對象的創建或操作產生任何影響。

S3沒有存儲桶之外的文件夾,但是對象(文件)的名稱中可以帶有/ s(正斜杠),並且有一些基於前綴的檢索方法,可以讓您模擬目錄列表。 但是,這意味着您不能創建一個空文件夾。

因此,解決方法將是放置一個空的txt文件,並在病房后將其刪除,但文件夾結構將保持不變。

/* function to upload empty test.txt file to subfolders /folder/ on S3 bucketname */
$s3->putObjectFile(‘test.txt’, ‘bucketname’, ‘/folder/test.txt’, S3::ACL_PUBLIC_READ);

/* function to delete empty test.txt file to subfolders /folder/ on S3 bucketname */
$s3->deleteObject(‘bucketname’, ‘/folder/test.txt’);

暫無
暫無

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

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