Created
March 3, 2015 08:32
-
-
Save danpette/33b93e69ea9f5dc66917 to your computer and use it in GitHub Desktop.
Amazone S3 file upload class
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Somewhere\Model; | |
class Upload { | |
public function __construct() {} | |
public function addFile($post_name, $directory = '/usr/share/nginx/files/') { | |
global $s3, $Log; //S3 library and Monolog | |
$FileErrorIndex = $_FILES[$post_name]["error"]; | |
$allowedExts = array("gif", "jpeg", "jpg", "png",'pdf','csv'); | |
$temp = explode(".", $_FILES[$post_name]["name"]); | |
$extension = end($temp); | |
$mime = ""; | |
switch($extension){ | |
case 'gif': $mime = 'image/' . $extension; break; | |
case 'jpeg': $mime = 'image/' . $extension; break; | |
case 'jpg': $mime = 'image/' . $extension; break; | |
case 'png': $mime = 'image/' . $extension; break; | |
case 'csv': $mime = 'text/csv'; break; | |
case 'pdf': $mime = 'application/pdf'; break; | |
} | |
$filename = ""; | |
if (!in_array($extension, $allowedExts)) { | |
throw new \Exception('Invalid mime type', 504); | |
} | |
if ($FileErrorIndex == UPLOAD_ERR_OK) { | |
$filename = str_replace('/','_',$mime).'_' . sha1(date('YmdHis')) . '.' . $extension; | |
try { | |
// Upload data. | |
$result = $s3->putObject(array( | |
'Bucket' => 'somebucketname', | |
'Key' => $filename, | |
'SourceFile' => $_FILES[$post_name]["tmp_name"], | |
'ACL' => 'public-read', | |
'ContentType' => $mime, | |
'ServerSideEncryption' => 'AES256' | |
)); | |
return $filename; | |
} catch (S3Exception $e) { | |
$Log->addCritical('upload_s3_failed', ['Message' => $e->getMessage(), 'File' => $e->getFile(), 'Code' => $e->getCode(), 'Line' => $e->getLine()]); | |
} | |
} | |
else { | |
switch ($FileErrorIndex) { | |
case UPLOAD_ERR_INI_SIZE: | |
$message = "The uploaded file exceeds the upload_max_filesize directive in php.ini"; | |
break; | |
case UPLOAD_ERR_FORM_SIZE: | |
$message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"; | |
break; | |
case UPLOAD_ERR_PARTIAL: | |
$message = "The uploaded file was only partially uploaded"; | |
break; | |
case UPLOAD_ERR_NO_FILE: | |
$message = "No file was uploaded"; | |
break; | |
case UPLOAD_ERR_NO_TMP_DIR: | |
$message = "Missing a temporary folder"; | |
break; | |
case UPLOAD_ERR_CANT_WRITE: | |
$message = "Failed to write file to disk"; | |
break; | |
case UPLOAD_ERR_EXTENSION: | |
$message = "File upload stopped by extension"; | |
break; | |
default: | |
$message = "Unknown upload error"; | |
break; | |
} | |
throw new \Exception($message, 503); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment