这种情况已经发生过很多次了,但我仍然有点困惑。很多答案只关注谈论上传进度条,而不是从 S3 上传获取实际的上传进度。
我已经阅读了很多问题并找到了很多软件,但我仍然没有更深入地理解 S3 上传的基本问题。
有没有一种方法可以上传到 S3,同时了解上传进度,而不必先使用我自己的应用程序服务器资源将文件存储在临时目录中?
我是否必须先将文件存储在自己的服务器上,然后推送到 S3?我听过人们谈论一次将比特流传输到 S3(一次一大块),但我不确定这涉及什么。想象一下,我正在 HTML 页面中从客户端上传,如何从多部分中逐块传输文件? (我没有看到任何例子,只是文件已经在你的系统上并且你知道这些块的例子,这有点无用)。
当然,API 文档中有一个上传进度的示例,但同样假设该文件首先位于您的服务器上,并且不是来自用户提供的另一台计算机。
编辑:我最初的想法是制作一个 PHP 脚本,可以每隔一段时间就获取上传进度 ping AWS 一次。我正在查看 API,看看他们是否支持类似的功能,但 atm 不走运。如果有什么事情请告诉我...
进一步编辑:闪存是唯一的方法吗?
Thanks,
YES,这在 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',
'params' => [
'@http' => [
'progress' => function ($downloadTotalSize, $downloadSizeSoFar, $uploadTotalSize, $uploadSizeSoFar) {
printf(
"%s of %s downloaded, %s of %s uploaded.\n",
$downloadSizeSoFar,
$downloadTotalSize,
$uploadSizeSoFar,
$uploadTotalSize
);
}
]
]
]);
AWS 文档对此进行了解释 -S3 配置部分 https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html#progress。它通过暴露 GuzzleHttp 来工作progress
属性可调用,如中所述这个答案 https://stackoverflow.com/a/34923682/1325575.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)