0

次のコードを使用して、ユーザーがアップロードした写真を保存するために Amazon S3 を使用しています。

        if(isset($_POST['Submit'])){

        $fileName = $_FILES['theFile']['name'];
        $fileTempName = $_FILES['theFile']['tmp_name'];
        $folderName = "{id}/{address}/$fileName";

        //create a new bucket
        $s3->putBucket("bucket_name", S3::ACL_PUBLIC_READ);

        //move the file
        if ($s3->putObjectFile($fileTempName, "bucket_name", $folderName, S3::ACL_PUBLIC_READ)) {
            echo ""; //etc, etc

およびは{id}{address}mysql データベースに保存されている各ユーザーの一意のデータに基づいて、ファイルがアップロードされるときにフォルダーの外観を作成するために使用される動的変数です。

私が抱えている問題は、これらのファイルを各ユーザーのパスワードで保護されたサイト内に表示することです。以下で使用しているコードは、すべてのユーザーの写真を取得し、すべてのユーザーに表示します。{id}/{address}/$fileNameに変換した場合123/figuero/photo.jpg、ユーザー123123/figuero/photo.jpg(または序文123/または123/xxx/

bucket_name以下で使用しているコードでは、写真に関連付けられた動的データに関連付けられたファイルだけでなく、内部のすべてのファイルをすべてのユーザーが見ることができます。

    <ul>
        <?php
            $i = 0;
            $contents = $s3->getBucket("bucket_name");

             foreach($contents as $file)
             {

             $fname = $file['name'];
             $furl = 'http://bucket_name.s3.amazonaws.com/'.$fname;

                 echo "<li><img src='$furl'></li>";
                 {
                     $i = 0; 
                 }
             }
        ?>
    <ul>

言い換えれば、http://bucket_name.S3.amazonaws.com/内のすべてのファイルは、コードによって表示されるようにプルされています。123123/xxx/

私は何が欠けていますか?よろしくお願いします。

4

1 に答える 1

0

「ディレクトリ」タイプのニーズに合わせて、バケット名に何らかのプレフィックスを使用するのが最善の方法だと思います。それ以外では、エコーする前にファイル名のディレクトリ名を評価する必要があります。

Zend Framework を使用して S3 ディレクトリ内のすべてのファイルを一覧表示する

つまり、バケット名を使用して区別します:

if(isset($_POST['Submit'])){

$fileName = $_FILES['theFile']['name'];
$fileTempName = $_FILES['theFile']['tmp_name'];
$folderName = "{id}/{address}/$fileName";
$bucketName = "bucket_name" . $folderName;

//create a new bucket
$s3->putBucket($bucketName, S3::ACL_PUBLIC_READ);

//move the file
if ($s3->putObjectFile($fileTempName, $bucketName, $folderName, S3::ACL_PUBLIC_READ)) {
    echo ""; //etc, etc

<ul>
    <?php
        $i = 0;
        $contents = $s3->getBucket($bucketName);

         foreach($contents as $file)
         {

         $fname = $file['name'];
         $furl = 'http://bucket_name.s3.amazonaws.com/'.$fname;

             echo "<li><img src='$furl'></li>";
             {
                 $i = 0; 
             }
         }
    ?>
<ul>
于 2012-11-30T22:23:26.793 に答える