我正在尝试上传多个图片,并且我设置了一个jquery插件,这样我就可以浏览多个文件并选择它们。
我遇到的唯一问题是访问控制器中的文件阵列,是否有人知道我该怎么做?感谢。
视图:
<input type="file" name="userfile[]" id="userfile" class="multi" />
答案 0 :(得分:10)
我去年在一个项目上遇到了同样的问题,经过一番搜索,我发现了一个完美的功能。
我不相信它,但不能记住我发现的地方,所以如果有人知道请链接回作者。
确保表单包含名为this
的文件<input type="file" name="userfile"/>
<input type="file" name="userfile2" />
<input type="file" name="userfile3" /> ..etc
或者
<input type="file" name="userfile[]" />
功能..
function multiple_upload($upload_dir = 'uploads', $config = array())
{
$files = array();
if(empty($config))
{
$config['upload_path'] = '../path/to/file';
$config['allowed_types'] = 'gif|jpg|jpeg|jpe|png';
$config['max_size'] = '800000000';
}
$this->load->library('upload', $config);
$errors = FALSE;
foreach($_FILES as $key => $value)
{
if( ! empty($value['name']))
{
if( ! $this->upload->do_upload($key))
{
$data['upload_message'] = $this->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file
$this->load->vars($data);
$errors = TRUE;
}
else
{
// Build a file array from all uploaded files
$files[] = $this->upload->data();
}
}
}
// There was errors, we have to delete the uploaded files
if($errors)
{
foreach($files as $key => $file)
{
@unlink($file['full_path']);
}
}
elseif(empty($files) AND empty($data['upload_message']))
{
$this->lang->load('upload');
$data['upload_message'] = ERR_OPEN.$this->lang->line('upload_no_file_selected').ERR_CLOSE;
$this->load->vars($data);
}
else
{
return $files;
}
}
现在已经有一段时间了,因为我已经使用过它,所以如果你需要任何额外的帮助来设置它,请告诉我。
答案 1 :(得分:1)
使用Jquery多次上传使用html元素array []在接收数据sobrescrevi的行为中开发如下全局变量$ _FILES PHP,以便函数do_upload可以在以后读取。见:
#copy the original array;
$temp_array;
foreach($_FILES['fil_arquivo'] as $key => $val)
{
$i = 0;
foreach($val as $new_key)
{
$temp_array[$i][$key] = $new_key;
$i++;
}
//
}
$i = 0;
foreach($temp_array as $key => $val)
{
$_FILES['file'.$i] = $val;
$i++;
}
#clear the original array;
unset($_FILES['fil_arquivo']);
$upload_path = 'media/arquivos';
$config['upload_path'] = $upload_path;
$config['allowed_types'] = 'doc|docx|xls|xlsx|ppt|pptx|pdf|txt|jpg|png|jpeg|bmp|gif|avi|flv|mpg|wmv|mp3|wma|wav|zip|rar';
$config['encrypt_name'] = true;
$this->upload->initialize($config);
foreach($_FILES as $key => $value)
{
if( ! empty($value['name']))
{
if($this->upload->do_upload($key))
{
$this->upload->data();
}
}
}
答案 2 :(得分:0)
上面的ojjwood提供的HTML将生成多个输入框。如果您只想拥有一个输入框但仍然上传多个文件,则需要在multiple="multiple"
元素中包含属性<input>
。 []
中的name="userfile[]"
允许发布的数据为数组,而不仅仅是单个值。
在Codeigniter / PHP方面,您需要使用$_POST['userfile
]而不是$this->input->post('userfile')
来处理数组。