Created
June 22, 2015 19:19
-
-
Save boboldehampsink/2e645655d613574ec4b7 to your computer and use it in GitHub Desktop.
Upload Assets with jQuery File Upload - see https://blueimp.github.io/jQuery-File-Upload/
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 Craft; | |
class UploadsController extends BaseController { | |
/** | |
* Process uploaded files | |
* | |
* @author Bob Olde Hampsink | |
*/ | |
public function actionProcess() { | |
// Disable devmode script log | |
craft()->config->set('devMode', false); | |
// Get given folder id | |
$folderId = craft()->request->getParam('folder'); | |
// Process files for source | |
$response = craft()->uploads->process($folderId); | |
// Process files as assets | |
foreach($response['files'] as $key => $file) { | |
// Index file | |
$asset = craft()->uploads->index($file, $folderId); | |
// Add asset to array | |
$response['files'][$key]->asset = $asset->id; | |
} | |
// Return response as JSON | |
$this->returnJson($response); | |
} | |
} |
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 Craft; | |
class UploadsService extends BaseApplicationComponent | |
{ | |
// UploadHandler niet direct initialiseren | |
protected $initialize = false; | |
// Source settings | |
protected $settings = array(); | |
// Extra opties voor UploadHandler | |
protected $options = array(); | |
// UploadHandler error messages | |
protected $errorMessages = array( | |
1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini', | |
2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', | |
3 => 'The uploaded file was only partially uploaded', | |
4 => 'No file was uploaded', | |
6 => 'Missing a temporary folder', | |
7 => 'Failed to write file to disk', | |
8 => 'A PHP extension stopped the file upload', | |
'post_max_size' => 'The uploaded file exceeds the post_max_size directive in php.ini', | |
'max_file_size' => 'File is too big', | |
'min_file_size' => 'File is too small', | |
'accept_file_types' => 'Filetype not allowed', | |
'max_number_of_files' => 'Maximum number of files exceeded', | |
'max_width' => 'Image exceeds maximum width', | |
'min_width' => 'Image requires a minimum width', | |
'max_height' => 'Image exceeds maximum height', | |
'min_height' => 'Image requires a minimum height' | |
); | |
// Verwerk geuploade files | |
public function process($folderId) { | |
// Include UploadHandler class that comes with jQuery File Upload | |
require(CRAFT_PLUGINS_PATH.'uploads/libraries/UploadHandler.php'); | |
// Get source settings by ID | |
$sourceId = craft()->assets->getFolderById($folderId)->sourceId; | |
$this->settings = craft()->assetSources->getSourceById($sourceId)->settings; | |
// Stel opties in | |
$this->options = array( | |
'upload_dir' => $this->settings['path'], | |
'upload_url' => $this->settings['url'], | |
'image_versions' => array( | |
// The empty image version key defines options for the original image: | |
'' => array( | |
// Automatically rotate images based on EXIF meta data: | |
'auto_orient' => true | |
) | |
) | |
); | |
// Initialiseer UploadHandler | |
$handler = new \UploadHandler($this->options, $this->initialize, $this->errorMessages); | |
// Vang post requests op en return de response | |
return $handler->post(false); | |
} | |
// Indexeer geuploade files | |
public function index($file, $folderId) { | |
// Create new AssetFile Model | |
$asset = new AssetFileModel(); | |
$asset->sourceId = craft()->assets->getFolderById($folderId)->sourceId; | |
$asset->folderId = $folderId; | |
$asset->filename = IOHelper::getFileName($file->name); | |
$asset->kind = IOHelper::getFileKind(IOHelper::getExtension($file->name)); | |
$asset->size = $file->size; | |
$asset->dateModified = IOHelper::getLastTimeModified($this->settings['path'].$file->name); | |
if ($asset->kind == 'image') | |
{ | |
list($width, $height) = getimagesize($this->settings['path'].$file->name); | |
$asset->width = $width; | |
$asset->height = $height; | |
} | |
// Index file | |
craft()->assets->storeFile($asset); | |
return $asset; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Arrived at this gist from this post. Just wondering, how you were able to get this to work with a Sprout Form + Jquery File Upload?
I assume the above code would go inside a custom Craft plugin. I'm just unclear as to how you would handle calling fileupload from the front end with this solution.