...为登录时上传照片以供个人使用的用户创建存储桶和子目录。
将pics成功上传到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>";
}
}
需要帮助找出如何防止子文件夹被识别为文件并在显示中创建元素。非常感谢
答案 0 :(得分:2)
使用putbucket()
函数后使用$folder
这样的名称:
$s3->putBucket("file_bucket", S3::ACL_PUBLIC_READ);
$foldername = "anirudh/$fileName";
之后使用这些功能
if ($s3->putObjectFile($fileTempName, "file_bucket",
$foldername, S3::ACL_PUBLIC_READ))
答案 1 :(得分:0)
几种解决方案:
(最简单)如果以斜线结尾,则为文件夹。即检查substr($ fname,-1)=='/'并且你有一个文件夹
(Neater)您可以使用PCRE的get_object_list调用来获取文件夹名称后面的文件。如果您知道文件夹名称,这很有效。
(可能,未经测试)检查$ file ['size'] - 如果为零,则它是文件夹或空文件。因为你不想要空文件,这可能是一个选项。