Reputation: 385
I'm attempting to do a File Upload using the CodeIgniter "upload" library, but everytime I try to upload something I get this error:
"You have not specified any allowed file types. The filetype you are attempting to upload is not allowed."
I've searched and tried many solutions here on StackOverflow but none of them are working, here's my code:
views/screenshots.php
<form method="post" enctype="multipart/form-data" action="{baseurl}/upload/screenshot">
<input type="hidden" name="serverid" value="{id}" />
<label>Carica uno Screenshot</label>
<br />
<label class="custom-file" id="customFile" for="screenshot">
<input type="file" class="custom-file-input" id="screenshot" name="screenshot" aria-describedby="fileHelp">
<span class="custom-file-control form-control-file"></span>
</label>
<br />
<button type="submit" class="btn btn-secondary">Carica file</button>
</form>
config/upload.php
$config['allowed_types'] = '*';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = TRUE;
controllers/upload.php
public function screenshot()
{
/* Upload library config */
$config['upload_path'] = './files/screenshots/';
$this->upload->initialize($config);
/* Upload and check if it's failed */
if (!$this->upload->do_upload('screenshot')) {
$error = array('error' => $this->upload->display_errors());
echo json_encode($error);
print_r($this->upload->data());
} else {
/* Making an array with all the data of the upload */
$upload_data = $this->upload->data();
/* Making an array to pass to the Screenshot_model */
$screenshot = array(
'id_server' => $this->input->post('serverid'),
'id_user' => $this->session->userdata('userid'),
'image_url' => $upload_data('file_name')
);
/* Saving the Screenshot info into the database */
$this->Screenshot_model->addScreen($screenshot);
/* Redirect to Server edit */
redirect('/screenshots/'.$screenshot['id_server']);
}
}
print_r($this->upload->data()) result
Array ( [file_name] => download.png [file_type] => image/png [file_path] => C:/xampp/htdocs/gameparade/files/screenshots/ [full_path] => C:/xampp/htdocs/gameparade/files/screenshots/download.png [raw_name] => download [orig_name] => [client_name] => download.png [file_ext] => .png [file_size] => 1806 [is_image] => 1 [image_width] => [image_height] => [image_type] => [image_size_str] => )
I'm autoloading the library. My version of CodeIgniter is 3.1.6. I've also tried to use form_open_multipart(); in the view, but nothing changes.
I'm using XAMPP 7.2.0 on Windows 10 (PHP Version 7.2.0).
Upvotes: 0
Views: 3873
Reputation: 15131
Replace:
$this->upload->initialize($config);
with:
$this->upload->initialize($config, false);
From the docs (https://www.codeigniter.com/userguide3/libraries/file_uploading.html):
initialize([array $config = array()[, $reset = TRUE]])
Parameters:
$config (array) – Preferences
$reset (bool) – Whether to reset preferences (that are not provided in $config) to their defaults
Upvotes: 1
Reputation: 1361
The manual did not say '*'
can be used for all types. So better to try to change this:
$config['allowed_types'] = '*';
to
$config['allowed_types'] = 'gif|jpg|png';
and then try it with one of the file type.
According to the official document ,
allowed_types
default = None
,options = None
The mime types corresponding to the types of files you allow to be uploaded. Usually the file extension can be used as the mime type. Separate multiple types with a pipe.
Upvotes: 2