如何从php下载s3文件?
问题描述:
如何从php下载s3文件。下面的代码不是为我工作... 这里是我的代码如何从php下载s3文件?
上传文件应工作正确
try {
$s3->putObject([
'Bucket' => $config['s3']['bucket'],//'eliuserfiles',
'Key' => "uploads/{$name}",
'Body' => fopen($tmp_name, 'r+'),
//'SourceFile' => $pathToFile,
'ACL' => 'public-read',
]);
下载给我的错误
$objInfo = $s3->get_object_headers($config['s3']['bucket'], "uploads/{$name}");
$obj = $s3->get_object($config['s3']['bucket'], "uploads/{$name}");
header('Content-type: ' . $objInfo->header['_info']['content_type']);
echo $obj->body;
错误
PHP Catchable fatal error: Argument 2 passed to Aws\\AwsClient::getCommand() must be of the type array, string given, called in /php_workspace/s3_php/vendor/aws/aws-sdk-php/src/AwsClient.php on line 167 and defined in /php_workspace/s3_php/vendor/aws/aws-sdk-php/src/AwsClient.php on line 211, referer: http://localhost/upload.php
答
简单的方法:
包括Amazon S3 PHP Class
在你的项目。
实例化类:
1. OO方法(E,G; $ S3->的getObject(...)):
$s3 = new S3($awsAccessKey, $awsSecretKey);
2.静态(例如,克; S3 ::的getObject(...)):
S3::setAuth($awsAccessKey, $awsSecretKey);
个然后得到对象:
// Return an entire object buffer:
$object = S3::getObject($bucket, $uri));
var_dump($object);
通常情况下,最有效的方式做到这一点是将对象保存到一个文件或资源
<?php
// To save it to a file (unbuffered write stream):
if (($object = S3::getObject($bucket, $uri, "/tmp/savefile.txt")) !== false) {
print_r($object);
}
// To write it to a resource (unbuffered write stream):
$fp = fopen("/tmp/savefile.txt", "wb");
if (($object = S3::getObject($bucket, $uri, $fp)) !== false) {
print_r($object);
}
?>
答
您可以试试这个:
$bucket= "bucket-name";
$filetodownload = "name-of-the-file";
$resultbool = $s3->doesObjectExist ($bucket, $filetodownload);
if ($resultbool) {
$result = $client->getObject ([
'Bucket' => $bucket,
'Key' => $filetodownload
]);
}
else
{
echo "file not found";die;
}
header ("Content-Type: {$result['ContentType']}");
header ("Content-Disposition: attachment; filename=" . $filetodownload);
header ('Pragma: public');
echo $result ['Body'];
die();
这可能是一个版本问题。你正在使用哪个版本的aws? – Jan
“aws/aws-sdk-php”:“^ 3.8” –