Skip to content

Instantly share code, notes, and snippets.

@danpette
Created March 3, 2015 08:32
Show Gist options
  • Save danpette/33b93e69ea9f5dc66917 to your computer and use it in GitHub Desktop.
Save danpette/33b93e69ea9f5dc66917 to your computer and use it in GitHub Desktop.
Amazone S3 file upload class
<?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