有一些类似的问题,但没有一个很好的答案如何使用带进度条的PHP直接上传文件到S3。是否可以在不使用Flash的情况下添加进度条?
注意:我指的是从客户端浏览器直接上传到S3。
答案 0 :(得分:2)
我在我们的项目中完成了这项工作。由于标准cross domain安全策略,您无法使用AJAX直接上传到S3;相反,您需要使用常规表单POST或Flash。您需要在相对复杂的过程中发送安全策略和签名,如S3 docs中所述。
答案 1 :(得分:0)
从技术上讲,使用PHP无法从客户端访问 - > S3。如果您想使用 PHP ,您的解决方案必须按如下方式设计:
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