Professional Software Consulting

s3_fileUpload.php

Uploads an object (file) from your computer to an AWS S3 bucket.

Usage Statement
USAGE: s3_fileUpload.php -b <bucketName> -f <filepath> -k <filekey> -a <accessKeyId> -s <secretKeyId> [-p <PRIVATE | PUBLIC_READ | PUBLIC_READ_WRITE>] [-t <content-type>]
        -b indicates the bucket name you want to upload the file to
        -f indicates the full path and file to upload (may be relative)
        -k is the key the file should be stored under
        -a is the public AWS access key
        -s is the private AWS secret key
        -p permissions, default to PUBLIC_READ
        -t is the content-type, aka mime-type, for storage


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

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

# php s3_fileUpload.php -b myBucket -f myFile.txt -k myFile.txt -a 9JDP49S2K26L99094NRY -s jLlLmjL2/pF91E8fknHCl8NGcrYAiNuept7W/93U -p PUBLIC_READ

# php s3_fileUpload.php -b myBucket -f myFile.txt -k myFile.txt -a 9JDP49S2K26L99094NRY -s jLlLmjL2/pF91E8fknHCl8NGcrYAiNuept7W/93U -p PRIVATE -t application/octet-stream



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.
*/

//
// Creates a new file in S3.
//
// ----------------------------------------------------------------------------
function printUsage($progName)
{
    echo "\n";
    echo " USAGE: $progName -b <bucketName> -f <filepath> -k <filekey>\n";
    echo "              -a <accessKeyId> -s <secretKeyId>\n";
    echo "              [-p <PRIVATE | PUBLIC_READ | PUBLIC_READ_WRITE>]\n";
    echo "              [-t <content-type>]\n";
    echo "\n";
    echo " -b indicates the bucket name you want to upload the file to\n";
    echo " -f indicates the full path and file to upload (may be relative)\n";
    echo " -k is the key the file should be stored under\n";
    echo " -a is the public AWS access key\n";
    echo " -s is the private AWS secret key\n";
    echo " -p permissions, default to PUBLIC_READ\n";
    echo " -t is the content-type, aka mime-type, for storage\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['f']))
    {
        echo "\n ERROR: File 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['t']))
    {
        $contentType = $cliArgs['t'];
    }
    else
    {
        $contentType = null;
    }

    if (isset($cliArgs['p']))
    {
        $badArg = false;

        switch ((string)$cliArgs['p'])
        {
            case "PRIVATE":
                $perm = S3::ACL_PRIVATE;
                break;
            case "PUBLIC_READ":
                $perm = S3::ACL_PUBLIC_READ;
                break;
            case "PUBLIC_READ_WRITE":
                $perm = S3::ACL_PUBLIC_READ_WRITE;
                break;
            default:
                $badArg = true;
        }

        if ($badArg)
        {
            echo "\n ERROR: Invalid permission\n";
            printUsage($argv[0]);
            break;
        }
    }
    else
    {
        $perm = S3::ACL_PUBLIC_READ;
    }

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

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


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

    if (!$s3->putObjectFile($fileName, $bucketName, $keyName, $perm, array(), $contentType))
    {
        echo " ERROR CODE: ".$s3->err_code."\n";
        echo " ERROR MESSAGE: ".$s3->err_message."\n";
        break;
    }

    $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