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则用户123应该只能看到123/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 框架列出 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 回答