gpt4 book ai didi

php - 从 PHP 上传多个文件到 Amazon S3

转载 作者:行者123 更新时间:2023-12-01 12:37:55 28 4
gpt4 key购买 nike

有没有办法一次性上传多个文件,而不必为每个文件重新连接?

我使用 S3 作为我的 php 应用程序的存储,它需要存储大量(一次 100 个)的大多数小(约 10k)图像文件。目前我正在遍历它们并使用以下代码为每个单独上传:

$s3->putObjectFile($uploadFile, $bucketName, ($uploadFile), S3::ACL_PUBLIC_READ)

这需要很长时间。对于 1.5 兆文件,大约一分钟。按照其他答案中的建议关闭 SSL 会减少到大约 40 秒,但这仍然很慢。

这是我当前的代码,使用适用于 PHP 的 Amazon S3 REST 实现
$s3 = new S3($awsAccessKey, $awsSecretKey, false);


function send_to_s3($s3, $bucketName, $uploadFile)

{

$start = microtime(true);



// Check if our upload file exists
if (!file_exists($uploadFile) || !is_file($uploadFile))
exit("\nERROR: No such file: $uploadFile\n\n");

// Check for CURL
if (!extension_loaded('curl') && !@dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll'))
exit("\nERROR: CURL extension not loaded\n\n");



if ($s3->putObjectFile($uploadFile, $bucketName, ($uploadFile), S3::ACL_PUBLIC_READ))
{

$end = microtime(true);

$took = $end - $start;

echo "S3::putObjectFile(): File copied to {$bucketName}/".($uploadFile).PHP_EOL . ' - ' . filesize($uploadFile) . ' in ' . $took . ' seconds<br />';

return $took;
}
else
{
print 'error';
}

}

感谢任何帮助。

最佳答案

use Aws\S3\S3Client;    
use Aws\CommandPool;
use Guzzle\Service\Exception\CommandTransferException;

$commands = array();
foreach ( $objects as $key => $file ) {
$fileContent = $file['body'];
$objParams = array (
'ACL' => 'bucket-owner-full-control',
'Bucket' => 'bucket_name',
'Key' => 's3_path',
'Body' => $fileContent
);
$commands[] = $clientS3->getCommand('PutObject', $objParams);
}
try {
$results = CommandPool::batch($clientS3, $commands);
} catch (CommandTransferException $e) {
$succeeded = $e->getSuccessfulCommands();
echo "Failed Commands:\n";
foreach ($e->getFailedCommands() as $failedCommand) {
echo $e->getExceptionForFailedCommand($failedCommand)->getMessage() . "\n";
}
}

关于php - 从 PHP 上传多个文件到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27888115/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com