简体   繁体   中英

How can I download file from s3 in php?

How can I download file from s3 in php. The following code not working for me... Here is my code

upload file should work correct

    try {
    $s3->putObject([
        'Bucket' => $config['s3']['bucket'],//'eliuserfiles',
        'Key'    => "uploads/{$name}",
        'Body'   =>  fopen($tmp_name, 'r+'),
        //'SourceFile' => $pathToFile,
        'ACL'    => 'public-read',
    ]);

download gives me error

  $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;

error

 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

Simple way to do this:

include Amazon S3 PHP Class in you're project.

instantiate the class:

1. OO method (e,g; $s3->getObject(...)):

$s3 = new S3($awsAccessKey, $awsSecretKey);

2. Statically (e,g; S3::getObject(...)):

S3::setAuth($awsAccessKey, $awsSecretKey);

Then get Objects:

// Return an entire object buffer:
    $object = S3::getObject($bucket, $uri));
    var_dump($object);

Usually, the most efficient way to do this is to save the object to a file or resource

<?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);
    }

?>

S3 Class -With Examples

S3 Class -Documentation

You can try this :

$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 ();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM