我已经寻找和努力了三天,让这个工作,但我就是做不到。我想做的是使用多文件输入表单,然后上传它们。我不能只使用固定数量的文件上传。我在StackOverflow上尝试了许多解决方案,但我找不到一个有效的。
这是我的上传控制器
<?php
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url','html'));
}
function index()
{
$this->load->view('pages/uploadform', array('error' => ' ' ));
}
function do_upload()
{
$config['upload_path'] = './Images/';
$config['allowed_types'] = 'gif|jpg|png';
$this->load->library('upload');
foreach($_FILES['userfile'] as $key => $value)
{
if( ! empty($key['name']))
{
$this->upload->initialize($config);
if ( ! $this->upload->do_upload($key))
{
$error['error'] = $this->upload->display_errors();
$this->load->view('pages/uploadform', $error);
}
else
{
$data[$key] = array('upload_data' => $this->upload->data());
$this->load->view('pages/uploadsuccess', $data[$key]);
}
}
}
}
}
?>
我的上传表格是这样的。
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<input type="file" multiple name="userfile[]" size="20" />
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>
我一直有这样的错误:
您没有选择要上载的文件。
下面是示例的数组:
数组
如果我选择2个文件,我有这样的连续5次。我也使用标准的上传库。
试试这个代码。
这对我来说很好
每次启动库时都必须初始化
function do_upload()
{
foreach ($_FILES as $index => $value)
{
if ($value['name'] != '')
{
$this->load->library('upload');
$this->upload->initialize($this->set_upload_options());
//upload the image
if ( ! $this->upload->do_upload($index))
{
$error['upload_error'] = $this->upload->display_errors("<span class='error'>", "</span>");
//load the view and the layout
$this->load->view('pages/uploadform', $error);
return FALSE;
}
else
{
$data[$key] = array('upload_data' => $this->upload->data());
$this->load->view('pages/uploadsuccess', $data[$key]);
}
}
}
}
private function set_upload_options()
{
//upload an image options
$config = array();
$config['upload_path'] = 'your upload path';
$config['allowed_types'] = 'gif|jpg|png';
return $config;
}
进一步编辑
我已经找到了一种方法,你必须上传一个独特的输入框你的文件
CodeIgniter不支持多个文件。在foreach中使用do_upload()与在外部使用没有什么不同。
您需要在没有CodeIgniter帮助的情况下处理它。这里有一个例子https://github.com/woxxy/FoOlSlide/blob/master/application/controllers/admin/series.php#L331-370
https://stackoverflow.com/a/9846065/1171049
这就是你在信中说的:)
您应该在CI中使用此库进行多次上载https://github.com/stvnthomas/CodeIgniter-Multi-Upload
安装只需复制MY_上传。php文件到应用程序库目录。
用途:在控制器中进行功能测试
public function test_up(){
if($this->input->post('submit')){
$path = './public/test_upload/';
$this->load->library('upload');
$this->upload->initialize(array(
"upload_path"=>$path,
"allowed_types"=>"*"
));
if($this->upload->do_multi_upload("myfile")){
echo '<pre>';
print_r($this->upload->get_multi_upload_data());
echo '</pre>';
}
}else{
$this->load->view('test/upload_view');
}
}
上传您的视图。应用程序/视图/测试文件夹中的php
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile[]" id="myfile" multiple>
<input type="submit" name="submit" id="submit" value="submit"/>
在你的帮助下,我终于成功了!
这是我的密码:
function do_upload()
{
$this->load->library('upload');
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for($i=0; $i<$cpt; $i++)
{
$_FILES['userfile']['name']= $files['userfile']['name'][$i];
$_FILES['userfile']['type']= $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile']['error'][$i];
$_FILES['userfile']['size']= $files['userfile']['size'][$i];
$this->upload->initialize($this->set_upload_options());
$this->upload->do_upload();
}
}
private function set_upload_options()
{
//upload an image options
$config = array();
$config['upload_path'] = './Images/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['overwrite'] = FALSE;
return $config;
}
谢谢你们!
问题内容: 有没有办法用Flask接收多个上传的文件?我尝试了以下方法: 然后打印内容 如果我上传多个文件,它将仅打印该集中的第一个文件: 是否可以使用Flask的内置上传处理方式接收多个文件?谢谢你的帮助! 问题答案: 你可以使用flask.request.files的方法getlist,例如:
问题内容: 我最近一直在尝试使用PHP,到目前为止一直很好,直到碰到一堵墙为止。这是我的一小段代码。它允许我上传单个文件,但是我想要的是能够上传多个文件。 这是PHP和HTML文件: 和PHP文件: 任何帮助将不胜感激。 问题答案: Index.html load.php
问题内容: 我需要使用Laravel 5.1作为后端将图像和视频文件上传到Angular应用程序中的服务器。所有Ajax请求都需要首先发送到Laravel控制器,并且我们在这里有代码说明文件到达那里后如何处理。以前,我们已经完成了普通的HTML表单以将文件上传提交到控制器,但是在这种情况下,我们需要避免刷新表单的页面,因此我尝试通过Angular在Ajax中进行尝试。 我需要将以前通过HTML表单
我试图理解以下文档: Transferutility.UploadDirectory null null null
我正在尝试设置一个endpoint,允许多个文件上传,以及其他表单数据。将其视为一个创建产品页面,其中包含两个产品图像以及其他信息。理想情况下,我希望将请求映射到POJO POJO: 但这不管用,我明白了: 如果我删除,它就可以正常工作。 看来< code>List也有同样的问题 哪个抛出 : 我已经看到了使用
但是如何为多个文件做呢? PS.在webflux中有没有另一种上传一组文件的方法?