使用php直接上传到带有进度条的s3

时间:2012-02-17 01:27:01

标签: php amazon-s3 progress-bar

关于这个问题Upload File Directly to S3 with Progress Bar,我想知道是否有更新或其他方式在不使用flash或java applet的情况下执行此操作?

我已经尝试过使用这个swfupload_s3 http://swfupload.org/forum/generaldiscussion/2185,它可以正常工作,但不幸的是进度条会达到100%而且发现了这个,

  

(1)本地代理服务器和一些反病毒软件会导致这种情况   行为。而不是将上传发送到服务器的反病毒   软件拦截上传并接受整个文件。 SWFUpload的   已发送整个文件并显示100%。这很快发生   因为还没有发出任何东西,所有这一切都发生在当地。该   反病毒然后扫描截获的文件并将其发送到   服务器。与此同时,SWFupload紧随其后。一旦   反病毒已经发送了服务器响应的文件和SWFUpload   “完成”   

  (2)已知问题。我们已经记录了这一点。没有工作。这就是它只适用于任何客户端上传的方式   反病毒干扰上传时的工具   

  http://swfupload.org/forum/generaldiscussion/642(1)   
  http://code.google.com/p/swfupload/issues/detail?id=213(2)

我已经在这2天了,但我似乎找不到另一种方式。或者根本没有?

2 个答案:

答案 0 :(得分:0)

有一个带有用于文件上传的S3 API的开源PHP脚本,它确实实时返回上传的进度,如果您愿意,也可以自定义上传器UI:

http://www.plupload.com/

答案 1 :(得分:0)

我设法使用AWS的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) {
            printf(
                "%s of %s downloaded, %s of %s uploaded.\n",
                $downloadSizeSoFar,
                $downloadTotalSize,
                $uploadSizeSoFar,
                $uploadTotalSize
            );
        }
    ]
]);

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