Currently if I supply no extensions to the class it allows no extensions. I would like to allow all extensions. Is there any way to do this without hacking the core?
So far it looks like it would only be possible via a hack.
I inserted a return true
on line 556 in system/libraries/Upload.php.
The answer to your direct question: No, there's no way to do this without overriding the core
To good news is you can avoid hacking the core, per the manual
As an added bonus, CodeIgniter permits your libraries to extend native classes if you simply need to add some functionality to an existing library. Or you can even replace native libraries just by placing identically named versions in your application/libraries folder.
So, to have a drop in replacement for your library, you could copy Upload.php to your
application/libraries
folder, and then add your custom logic to that Upload.php file. Code Igniter will include this file instead whenever you load the upload library.
Alternately, you could create your OWN custom uploader class that extends the original, and only refines the is_allowed_filetype function.
application/libraries/Myuploader.php
class Myuploader Extends Uploader{
function is_allowed_filetype(){
//my custom code here
}
}
You'll want to read over the changelog whenever you're upgrading, but this will allow you to keep your code and the core code in separate universes.
What I do is:
$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;
That makes all files in every function call automatically allowed.
You simply need to replace this condition:
if (! $this->is_allowed_filetype())
{
$this->set_error('upload_invalid_filetype');
return false;
}
With:
if (count($this->allowed_types) && !$this->is_allowed_filetype())
{
$this->set_error('upload_invalid_filetype');
return false;
}