【问题标题】:How to upload pic to Amazon s3 bucket and subfolder and display using php foreach如何将图片上传到 Amazon s3 存储桶和子文件夹并使用 php foreach 显示
【发布时间】:2012-11-20 00:12:27
【问题描述】:

我在这里使用代码:http://net.tutsplus.com/tutorials/php/how-to-use-amazon-s3-php-to-dynamically-store-and-manage-files-with-ease/

...为登录时上传图片供个人使用的用户创建存储桶和子目录。

图片成功上传到s3服务器后,在html文件中以列表形式显示,如下:

 <ul id="sortable-list">

    <?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 class=\"default\"><img src=\"$furl\" width=\"100\"></li>";

        {
            $i = 0;
        }

    }
    ?>
 </ul>

由于某种原因,子文件夹被识别为存储桶内的一个文件,并将$contents 的第一个元素填充为http://bucket_name.s3.amazonaws.com/subfolder/,但如果没有引用文件名,当然是空的。

我使用的 php 是上面提到的 tutsplus.com 教程中 page.php 的修改形式。与创建存储桶和子目录有关的代码在这里:

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

        $fileName = $_FILES['theFile']['name'];
        $fileTempName = $_FILES['theFile']['tmp_name'];
        $folderName = "subfolder/$fileName";

        $s3->putBucket("unique_id", S3::ACL_PUBLIC_READ);

        if ($s3->putObjectFile($fileTempName, "unique_id", $folderName, S3::ACL_PUBLIC_READ)) {
            echo "<strong>We successfully uploaded your file.</strong>";
        }else{
            echo "<strong>Something went wrong while uploading your file... sorry.</strong>";
        }
    }

需要帮助弄清楚如何防止子文件夹被识别为文件并在显示中创建元素。非常感谢

【问题讨论】:

    标签: php amazon-s3


    【解决方案1】:

    使用putbucket()函数后使用$folder这样的名字:

    $s3->putBucket("file_bucket", S3::ACL_PUBLIC_READ);
                $foldername = "anirudh/$fileName";
    

    然后使用这些功能

    if ($s3->putObjectFile($fileTempName, "file_bucket",
               $foldername, S3::ACL_PUBLIC_READ))
    

    【讨论】:

    • 我正在使用 AWS S3 并且我的 S3.php 文件没有函数 listObjects。我尝试从 GIT 找到它,但它也丢失了它们!你能告诉我它是否被删除或已弃用?如果是的话,替代方案是什么。谢谢
    【解决方案2】:

    几种解决方案:

    1. (最简单)如果它以斜线结尾,则它是一个文件夹。即检查 substr($fname,-1) == '/' 你有一个文件夹

    2. (Neater) 您可以使用带有 PCRE 的 get_object_list 调用来仅获取文件夹名称后包含某些内容的文件。如果您知道文件夹名称,这将很有效。

    3. (可能,未经测试)检查 $file['size'] - 如果为零,则它是文件夹或空文件。由于您无论如何都不想要空文件,因此这可能是一种选择。

    【讨论】:

      【解决方案3】:

      第一步:从https://github.com/tpyo/amazon-s3-php-class/blob/master/S3.php下载库

      第 2 步:在您的项目中配置它

      第 3 步:按照以下代码进行操作

                  $fileTempName= $_FILES["file"]['tmp_name'];
           
                  $bucket_name = "your_bucket_name";
            
                  $upload_folder ="foldername" (which is created by you (folder) in aws  )
      
                  $companyId = "subfolder name";
      
      
      
                 $s3 = new S3("your access_key", "your secret_key"));
                 $s3->putObject($fileTempName,$bucket_name,$upload_folder.'/'.$companyId);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-27
        • 2020-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        • 2017-12-23
        相关资源
        最近更新 更多