CI 多文件上传 Multiple upload
今天在处理CI多文件上传时,需要用到多文件上传,看到有帖子使用 swfupload 上传方式,发现并不适合我的需求的(当上传的文件需要和表单数据一同提交时,swfupload 上传就不适合了),抓狂。也有看到一些文章但都是很老的了,于是写了个基于CI2.13的版本.贴代码:
/**
* Upload more file
*
* $param string field
* @return array
*/
public function multiple($field)
{
// Is $_FILES[$field] set? If not, no reason to continue.
if ( ! isset($_FILES[$field]))
{
$this->set_error('upload_no_file_selected');
return FALSE;
}
// 临时文件上传数组,用于整合自己想要的形式
$tmpfiles = array();
for ($i = 0, $len = count($_FILES[$field]['name']); $i < $len; $i ++)
{
if ($_FILES[$field]['size'][$i])
{
$tmpfiles['_SR_' . $i] = array(
'name' => $_FILES[$field]['name'][$i],
'type' => $_FILES[$field]['type'][$i],
'tmp_name' => $_FILES[$field]['tmp_name'][$i],
'error' => $_FILES[$field]['error'][$i],
'size' => $_FILES[$field]['size'][$i],
);
}
}
//覆盖 $_FILES 内容
$_FILES = $tmpfiles;
$errors = array();
$files = array();
$index = 0;
$_tmp_name = preg_replace('/(.+)$/', '', $this->file_name);
foreach ($_FILES as $key => $value)
{
/*
* 多文件上传的命名规则,用于替代CI中自由的文件命名方式
*
* -SR-17-50557-0.jpg
* -SR-17-50557-1.jpg
* -SR-17-50557-2.jpg
*/
$this->_file_name_override = $_tmp_name . '-' . $index;
if( ! $this->do_upload($key))
{
$errors[$index] = $this->display_errors('', '');
$this->error_msg = array();
}
else
{
$files[$index] = $this->data();
}
$index ++;
}
// 返回数组
return array(
'error' => $errors,
'files' => $files
);
}
将此代码贴在 system\libraries\Upload.php 里即可,也可写扩展在你的核心中 \application\libiraries\MY_Upload.php中
我是直接将system\libraries\Upload.php粘到\application\libiraries\Upload.php
本人试了,挺好。
不好意思说干了好几年的PHP··· 如有赞助空间更佳,因为敝人想要建个博客。。。blog.stepreal.com 没有空间 {:soso__17615529269517227981_3:} 菜鸟的悲哀是有了代码不会用,能举个例子吗:'( 这个在原生的php里面就有的吧,不在ci里面也可以用,。。 赞! 有没有写多图片上传完善一点的{:1_1:}
页:
[1]