Professional Software Consulting

s3_fileDownload.php

Downloads an object (file) from a bucket to your computer.

Usage Statement
USAGE: s3_fileDownload.php -b <bucketName> -k <filekey> -f <filepath> [-o] -a <accessKeyId> -s <secretKeyId>
        -b indicates the bucket name you want to get a file from
        -k is the key to get
        -f indicates what the file should be named on the local drive
        -o means overwrite existing file (default is to fail if file exists)
        -a is the public AWS access key)
        -s is the private AWS secret key


Sample Invokation
# php s3_fileDownload.php -b myBucket -k myFile.txt -f myFile.txt -a 9JDP49S2K26L99094NRY -s jLlLmjL2/pF91E8fknHCl8NGcrYAiNuept7W/93U

# php s3_fileDownload.php -b myBucket -k myFile.txt -f backupdir/myFile.txt -a 9JDP49S2K26L99094NRY -s jLlLmjL2/pF91E8fknHCl8NGcrYAiNuept7W/93U

# php s3_fileDownload.php -b myBucket -k myFile.txt -f otherFile.txt -a 9JDP49S2K26L99094NRY -s jLlLmjL2/pF91E8fknHCl8NGcrYAiNuept7W/93U

# php s3_fileDownload.php -b myBucket -k myFile.txt -f myFile.txt -a 9JDP49S2K26L99094NRY -s jLlLmjL2/pF91E8fknHCl8NGcrYAiNuept7W/93U -o


Source Code
<?php
/**
* Copyright (c) 2008, Corey's Consulting LLC.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
*   this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in the
*   documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

//
// Downloads a file from S3.
//
// ----------------------------------------------------------------------------
function printUsage($progName)
{
    echo "\n";
    echo " USAGE: $progName -b <bucketName> -k <filekey> -f <filepath> [-o] -a <accessKeyId> -s <secretKeyId>\n";
    echo "\n";
    echo " -b indicates the bucket name you want to get a file from\n";
    echo " -k is the key to get\n";
    echo " -f indicates what the file should be named on the local drive\n";
    echo " -o means overwrite existing file (default is to fail if file exists)\n";
    echo " -a is the public AWS access key)\n";
    echo " -s is the private AWS secret key\n";
    echo "\n";
}


// ----------------------------------------------------------------------------
// MAIN     MAIN     MAIN     MAIN     MAIN     MAIN     MAIN     MAIN     MAIN
// ----------------------------------------------------------------------------
for (;;)    // enables a single exit point
{
    $retVal = 1;
    require_once("common.inc");
    require_once("S3.php");

    $key1 = '';
    $key2 = '';
    $cliArgs = parseCliArgs($argv);

    if ($argc == 1)
    {
        printUsage($argv[0]);
        break;
    }

    if (isset($cliArgs['a']))
    {
        $key1 = $cliArgs['a'];
    }
    else
    {
        echo "\n ERROR: access key not provided\n";
        printUsage($argv[0]);
        break;
    }

    if (isset($cliArgs['s']))
    {
        $key2 = $cliArgs['s'];
    }
    else
    {
        echo "\n ERROR: secret key not provided\n";
        printUsage($argv[0]);
        break;
    }

    if (!isset($cliArgs['b']))
    {
        echo "\n ERROR: Bucket name not provided\n";
        printUsage($argv[0]);
        break;
    }

    if (!isset($cliArgs['k']))
    {
        echo "\n ERROR: Key not provided\n";
        printUsage($argv[0]);
        break;
    }

    if (!isset($cliArgs['f']))
    {
        echo "\n ERROR: File name not provided\n";
        printUsage($argv[0]);
        break;
    }

    if (strlen($key1) == 0 || strlen($key2) == 0)
    {
        printUsage($argv[0]);
        break;
    }

    if (isset($cliArgs['o']))
    {
        $overwrite = true;
    }
    else
    {
        $overwrite = false;
    }


    $bucketName = $cliArgs['b'];
    $keyName = $cliArgs['k'];
    $fileName = $cliArgs['f'];

    if (!$overwrite && is_file($fileName))
    {
        echo "\n ERROR: File $fileName already exists, cannot download\n\n";
        break;
    }


    $s3 = new S3($key1, $key2);

    $fileObj = $s3->getObject($bucketName, $keyName);
    if ($fileObj === false)
    {
        echo " ERROR CODE: ".$s3->err_code."\n";
        echo " ERROR MESSAGE: ".$s3->err_message."\n";
        break;
    }

    $fp = fopen($fileName, 'wb');
    if ($fp === false)
    {
        echo "\n ERROR: Unable to open file $fileName\n\n";
        break;
    }

    $rv = fwrite($fp, $fileObj->body);
    if ($rv === false)
    {
        echo "\n ERROR: fwrite($fileName) failure\n\n";
        fclose($fp);
        break;
    }

    fclose($fp);

    $retVal = 0;

    break;    // always break

}    // end single-exit-point loop

exit ($retVal);

?>

     Contact Us     

Something wrong with this page or this site? Let the webmaster know by clicking HERE
This website designed, implemented, and maintained by Corey Dulecki
© 2009-2012, Corey's Consulting LLC