计算上传文件的数量
Posted
技术标签:
【中文标题】计算上传文件的数量【英文标题】:Counting the number of uploaded files 【发布时间】:2013-05-06 07:09:24 【问题描述】:我正在开发我的 CodeIgniter 项目,到目前为止它运行良好。
但是,我需要一些方法来,因为我想在某些情况下(但不是全部)限制它。
我该怎么做?我尝试了count($_FILES)
,但这没有给我任何可用的东西。
我还尝试了很多其他方法,但都没有给我所需的信息。
上传表单是一个多文件上传,我使用this库来处理多个上传。
没有计数的上传函数是这样的:
function do_upload()
$setid = $this->input->post('imageset');
$this->load->library('upload');
$this->load->library('image_lib');
$this->upload->initialize(array(
"upload_path" => "./photos/",
"allowed_types" => "jpg|jpeg|png|gif",
"encrypt_name" => TRUE
));
try
$this->upload->do_multi_upload("files");
$images = $this->upload->get_multi_upload_data();
$config = array(
'image_library' => 'gd2',
'create_thumb' => TRUE,
'maintain_ratio' => TRUE,
'width' => '145',
'height' => '145'
);
foreach ($images as $image)
$config['source_image'] = $image['full_path'];
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->manage_model->insertimage($image['file_name'],$image['orig_name'],$image['file_size'],$image['file_type'],$setid);
$this->session->set_flashdata('success','Billederne er nu blevet uploadet.');
catch (Exception $e)
$this->session->set_flashdata('error', $e);
redirect('manage/images','refresh');
非常感谢任何帮助。
【问题讨论】:
count($images)
设置该变量后。
@jeroen:问题是如果我通过$images
变量统计图片,然后报错,图片已经上传到服务器,我要统计在那之前。
如果你想避免上传,你需要在客户端使用javascript(也许结合php使用ajax)。
@jeroen:我不一定要避免上传部分 - 只要图像保留在 tmp 文件夹中,而不是在 upload_path 中。
@crypticツ 因为无论上传多少文件,这都会给我 1。可能与 PHP 用于此类事情的多维数组有关。
【参考方案1】:
您可以检查 $_FILES
变量中的项目数,例如:
$total = count($_FILES['your_variable_array_in_html']['tmp_name']);
你需要在:
$this->upload->do_multi_upload("files");
行。
正如您已经注意到的,$_FILES
仅包含一个变量 - 一个数组 - 包含不同部分的数组,tmp_name
、name
、error
等。查看manual 了解更多详细信息。
【讨论】:
谢谢!正是我想要的。 @jeroen 知道如何计算用户实际上传的文件数。现在,我的表单有5
文件字段,即使用户只上传2
文件,使用这种方法也会给我5
。
count
总是显示1
有时我上传文件时显示为 5【参考方案2】:
如果您想限制上传的文件。 您可以分两步限制它们:
只接受上传文件的指定数组名。即文件[]
现在您可以轻松统计
上传的文件了count($_FILES['files']['name']);
字符串 'name' 可以替换为 'tmp_name', 'error', 'size', 'type'
您使用的库在首次执行时已将文件上传到您的上传路径。所以你应该在上传之前手动检查它。
function do_upload()
$setid = $this->input->post('imageset');
$this->load->library('upload');
$this->load->library('image_lib');
$this->upload->initialize(array(
"upload_path" => "./photos/",
"allowed_types" => "jpg|jpeg|png|gif",
"encrypt_name" => TRUE
));
if (isset($_FILES['files']['name']))
$num = count($_FILES['files']['name']);
try
$this->upload->do_multi_upload("files");
$images = $this->upload->get_multi_upload_data();
$config = array(
'image_library' => 'gd2',
'create_thumb' => TRUE,
'maintain_ratio' => TRUE,
'width' => '145',
'height' => '145'
);
foreach ($images as $image)
$config['source_image'] = $image['full_path'];
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->manage_model->insertimage($image['file_name'],$image['orig_name'],$image['file_size'],$image['file_type'],$setid);
$this->session->set_flashdata('success','Billederne er nu blevet uploadet.');
catch (Exception $e)
$this->session->set_flashdata('error', $e);
redirect('manage/images','refresh');
希望对你有帮助
【讨论】:
我可能是错的,但 count() 将始终返回 1 或更大的值,除非参数为 NULL,在这种情况下它返回 0,因此如果没有上传文件,count() 的值仍然是1以上是关于计算上传文件的数量的主要内容,如果未能解决你的问题,请参考以下文章
Antd的Upload组件上传文件控制文件数量格式等,以及提交时如何获取文件