如何使用PHP和进度条将文件直接上传到S3

时间:2011-07-01 03:29:54

标签: php file-upload amazon-s3

有一些类似的问题,但没有一个很好的答案如何使用带进度条的PHP直接上传文件到S3。是否可以在不使用Flash的情况下添加进度条?

注意:我指的是从客户端浏览器直接上传到S3。

4 个答案:

答案 0 :(得分:2)

我在我们的项目中完成了这项工作。由于标准cross domain安全策略,您无法使用AJAX直接上传到S3;相反,您需要使用常规表单POST或Flash。您需要在相对复杂的过程中发送安全策略和签名,如S3 docs中所述。

答案 1 :(得分:0)

从技术上讲,使用PHP无法从客户端访问 - > S3。如果您想使用 PHP ,您的解决方案必须按如下方式设计:

  • 客户 - > Web服务器(PHP) - >亚马逊S3
  • 嵌入了PHP服务器的客户端 - >亚马逊S3

AWS PHP SDK:http://aws.amazon.com/sdkforphp/撰写得非常好,并包含有关如何从客户端发送文件的具体示例 - >服务器 - > S3

考虑到进度条,有很多选项可供选择。快速搜索stackoverflow.com会显示一个与此相同的问题:

答案 2 :(得分:0)

,可以在PHP SDK v3中执行此操作。

$client = new S3Client(/* config */);

$result = $client->putObject([
    'Bucket'     => 'bucket-name',
    'Key'        => 'bucket-name/file.ext',
    'SourceFile' => 'local-file.ext',
    'ContentType' => 'application/pdf',
    '@http' => [
        'progress' => function ($downloadTotalSize, $downloadSizeSoFar, $uploadTotalSize, $uploadSizeSoFar) {
            // handle your progress bar percentage
            printf(
                "%s of %s downloaded, %s of %s uploaded.\n",
                $downloadSizeSoFar,
                $downloadTotalSize,
                $uploadSizeSoFar,
                $uploadTotalSize
            );
        }
    ]
]);

AWS文档中解释了这一点 - S3 Config section。它的工作原理是暴露GuzzleHttp的progress属性可调用,如this SO answer中所述。

答案 3 :(得分:-1)

可以直接上传,但进度条是不可能的: http://undesigned.org.za/2007/10/22/amazon-s3-php-class/

在下载中查看example_form, 从浏览器直接上传到S3