PHP Classes

File: application/modules/extensions/aws/Aws/S3/PostObject.php

Recommend this page to a friend!
  Classes of Tran Tuan   Pretty PHP S3 Files Manager   application/modules/extensions/aws/Aws/S3/PostObject.php   Download  
File: application/modules/extensions/aws/Aws/S3/PostObject.php
Role: Application script
Content type: text/plain
Description: Application script
Class: Pretty PHP S3 Files Manager
Web based interface to manage files in Amazon S3
Author: By
Last change:
Date: 8 years ago
Size: 3,853 bytes
 

Contents

Class file image Download
<?php
namespace Aws\S3;

use
Aws\Credentials\CredentialsInterface;
use
GuzzleHttp\Psr7\Uri;

/**
 * Encapsulates the logic for getting the data for an S3 object POST upload form
 *
 * @link http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html
 */
class PostObject
{
    private
$client;
    private
$bucket;
    private
$formAttributes;
    private
$formInputs;
    private
$jsonPolicy;

   
/**
     * Constructs the PostObject.
     *
     * @param S3Client $client Client used with the POST object
     * @param string $bucket Bucket to use
     * @param array $formInputs Associative array of form input fields.
     * @param string|array $jsonPolicy JSON encoded POST policy document. The
     * policy will be base64 encoded and applied
     * to the form on your behalf.
     */
   
public function __construct(
       
S3Client $client,
       
$bucket,
        array
$formInputs,
       
$jsonPolicy
   
) {
       
$this->client = $client;
       
$this->bucket = $bucket;

        if (
is_array($jsonPolicy)) {
           
$jsonPolicy = json_encode($jsonPolicy);
        }

       
$this->jsonPolicy = $jsonPolicy;
       
$this->formAttributes = [
           
'action' => $this->generateUri(),
           
'method' => 'POST',
           
'enctype' => 'multipart/form-data'
       
];

       
$this->formInputs = $formInputs + ['key' => '${filename}'];
       
$credentials = $client->getCredentials()->wait();
       
$this->formInputs += $this->getPolicyAndSignature($credentials);
    }

   
/**
     * Gets the S3 client.
     *
     * @return S3Client
     */
   
public function getClient()
    {
        return
$this->client;
    }

   
/**
     * Gets the bucket name.
     *
     * @return string
     */
   
public function getBucket()
    {
        return
$this->bucket;
    }

   
/**
     * Gets the form attributes as an array.
     *
     * @return array
     */
   
public function getFormAttributes()
    {
        return
$this->formAttributes;
    }

   
/**
     * Set a form attribute.
     *
     * @param string $attribute Form attribute to set.
     * @param string $value Value to set.
     */
   
public function setFormAttribute($attribute, $value)
    {
       
$this->formAttributes[$attribute] = $value;
    }

   
/**
     * Gets the form inputs as an array.
     *
     * @return array
     */
   
public function getFormInputs()
    {
        return
$this->formInputs;
    }

   
/**
     * Set a form input.
     *
     * @param string $field Field name to set
     * @param string $value Value to set.
     */
   
public function setFormInput($field, $value)
    {
       
$this->formInputs[$field] = $value;
    }

   
/**
     * Gets the raw JSON policy.
     *
     * @return string
     */
   
public function getJsonPolicy()
    {
        return
$this->jsonPolicy;
    }

    private function
generateUri()
    {
       
$uri = new Uri($this->client->getEndpoint());

        if (
$uri->getScheme() === 'https'
           
&& strpos($this->bucket, '.') !== false
       
) {
           
// Use path-style URLs
           
$uri = $uri->withPath($this->bucket);
        } else {
           
// Use virtual-style URLs
           
$uri = $uri->withHost($this->bucket . '.' . $uri->getHost());
        }

        return (string)
$uri;
    }

    protected function
getPolicyAndSignature(CredentialsInterface $creds)
    {
       
$jsonPolicy64 = base64_encode($this->jsonPolicy);

        return [
           
'AWSAccessKeyId' => $creds->getAccessKeyId(),
           
'policy' => $jsonPolicy64,
           
'signature' => base64_encode(hash_hmac(
               
'sha1',
               
$jsonPolicy64,
               
$creds->getSecretKey(),
               
true
           
))
        ];
    }
}