尝试使用PHP将多个文件上载到S3时出错

时间:2017-12-28 09:50:54

标签: php amazon-s3

我正在开发一个项目,可以使用PHP从网站上传文件到Amazon S3 bucket

但是,我遇到了以下错误的问题:

  

fopen(uploadDoc / 1.jpg):无法打开流:没有这样的文件或   目录

我循环遍历多个文件,以便单独上传它们:

if (isset($_FILES['files']))
{
    for ($i = 0; $i < 10; $i++)
    {
        if (!empty($_FILES['files']['name'][$i]))
        {
            $name = $_FILES['files']['name'][$i];
            $tmp_name = $_FILES['files']['tmp_name'][$i];
            $ext = explode('.', $name);
            $ext = strtolower(end($ext));
            if ($ext == 'zip') { $temp_file_path = "uploadZip/{$name}"; $s3Key = "zip"; }
            else { $temp_file_path = "uploadDoc/{$name}"; $s3Key = "docs"; }
            try
            {
                $body = fopen($temp_file_path, 'rb');
                $s3->putObject([
                    'Bucket' => AWS_BUCKET,
                    'Key' => "{$s3Key}/{$name}",
                    'Body' => $body,
                    'ACL' => "public-read"
                ]);
            }
            catch (S3Exception $e)
            {
                die('There was an error uploading ' . $e->getMessage());
            }
            fclose($body);
            unlink($temp_file_path);
        }
    }
}

当我尝试使用相同的代码而不是循环上传单个文件时,它工作正常,所以我真的很困惑。

以下是用于上传文件的表单:

<form action="" method="post" enctype="multipart/form-data">
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input id="file" type="file" name="files[]"><br>
            <input name="upload" type="submit" value="Upload" class="general-btn blue">
        </form>

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我发现我的代码中出现了一些错误。

首先,我错过了上面提供的PHP代码段中的一行代码,这是:

if ($ext == 'zip') { $temp_file_path = "uploadZip/{$tmp_file_name}"; $s3Key = "zip"; }
else { $temp_file_path = "uploadDoc/{$tmp_file_name}"; $s3Key = "docs"; }
move_uploaded_file($tmp_name, $temp_file_path);
try

第二个错误发生在上面的HTML代码段中,该代码段为所有输入提供了相同的文件ID,方法是将ID更改为具有不同ID,文件成功上传且无错误

由于