我经常搜索并发现很多关于这个问题的问题,遗憾的是没有一个答案对我有帮助。
我正在尝试上传png图片,我收到以下错误:
不允许您尝试上传的文件类型。
我正在遵循此CI指南来构建我的代码:http://codeigniter.com/user_guide/libraries/file_uploading.html
这是我得到的:
查看文件:
[..]
<?= form_open_multipart() ?>
<input type="file" name="userfile" size="20" />
<br /><br />
<input type="submit" value="upload" />
<?= form_close() ?>
[..]
我的控制器:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
$xx = array('upload_data' => $this->upload->data());
$mimetype= $xx['upload_data']['file_type'];
var_dump('Mime: ' . $mimetype);
var_dump($_FILES);
if ( !$this->upload->do_upload())
{
Notice::add($this->upload->display_errors(), 'error');
}
else
{
$data['upload_data'] = $this->upload->data();
}
如你所见,我试着var_dump
mime类型,结果为空。
当我做var_dump($_FILES)
时,看起来一切都很好:
array(1) { ["userfile"]=> array(5) { ["name"]=> string(14) "imageofm.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(18) "/var/tmp/php5cDAZJ" ["error"]=> int(0) ["size"]=> int(358) } }
另外,我在'png' => array('image/png', 'image/x-png'),
中获得了config/mimes.php
行。
但是,它确实适用于所有图像(尚未尝试其他扩展)。
我很感激每一次尝试。
答案 0 :(得分:7)
只需编辑 application / config / mimes.php 中的 mimes.php 文件,然后用以下内容替换 csv 的行:
'csv' => array('application/vnd.ms-excel', 'text/anytext', 'text/plain', 'text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel')
答案 1 :(得分:4)
将'text / plain'添加到config / mimes.php中的CSV数组到$ mimes数组
答案 2 :(得分:1)
用2.1.2版本upload.php库替换codeigniter 2.1.0 system / libraries / upload.php解决了这个问题。希望这有帮助
答案 3 :(得分:1)
$this->load->library('upload');
$this->upload->set_allowed_types('*');
class MY_Upload extends CI_Upload {
function is_allowed_filetype() {
if (count($this->allowed_types) == 0 OR ! is_array($this->allowed_types))
{
$this->set_error('upload_no_file_types');
return FALSE;
}
if (in_array("*", $this->allowed_types))
{
return TRUE;
}
$image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe');
foreach ($this->allowed_types as $val)
{
$mime = $this->mimes_types(strtolower($val));
// Images get some additional checks
if (in_array($val, $image_types))
{
if (getimagesize($this->file_temp) === FALSE)
{
return FALSE;
}
}
if (is_array($mime))
{
if (in_array($this->file_type, $mime, TRUE))
{
return TRUE;
}
}
else
{
if ($mime == $this->file_type)
{
return TRUE;
}
}
}
return FALSE;
}
}
答案 4 :(得分:0)
另一个解决方案是在 php.ini
中启用extension=php_fileinfo.dll
答案 5 :(得分:0)
我只是在第34行的mime.php中添加此行,pptx现在正在上传。在真实服务器上测试它
'pptx'=&gt; array('application / vnd.openxmlformats-officedocument.wordprocessingml.document','application / zip'),
答案 6 :(得分:0)
实际上,就我而言,我是通过void canvas.toBlob(callback, mimeType, qualityArgument)
方法从画布创建的blob对象,因此blob文件没有其真实名称(具有扩展名),只是'blob'。因此,我必须使用传统方式上传文件,而不是使用“上传”库:
move_uploaded_file ( $file["tmp_name"], $target_file )