Php Yii多文件上传
嗨,我在yii做多个文件上传 我有一个设置表使用多个文件上传像这样 myfrom.phpPhp Yii多文件上传,php,yii,yii-events,Php,Yii,Yii Events,嗨,我在yii做多个文件上传 我有一个设置表使用多个文件上传像这样 myfrom.php <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'topic-form', 'enableAjaxValidation'=>false, 'htmlOptions' => array('enctype' => 'multipart/form-data'), // ADD THIS
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'topic-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'), // ADD THIS
));
?>
<div class="row">
<?php
$this->widget('CMultiFileUpload', array(
'name' => 'imagepath',
'model'=> $model,
'id'=>'imagepath',
'accept' => 'jpeg|jpg|gif|png', // useful for verifying files
'duplicate' => 'Duplicate file!', // useful, i think
'denied' => 'Invalid file type', // useful, i think
));
?>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
</div>
<?php $this->endWidget(); ?>
但只有当我使用多文件上传小部件时,它才会进入if循环。。。(如果($_POST['Uploadimage']))
单文件上传(如下所示)和上传都可以正常工作,但多文件上传会出现问题
<div class="row">
<?php echo $form->labelEx($model,'imagepath'); ?>
<?php echo CHtml::activeFileField($model,'imagepath',array('size'=>60,'maxlength'=>500)); ?>
<?php echo $form->error($model,'imagepath'); ?>
</div>
我不知道我的代码出了什么问题……我指的是,为了更好地多次上传文件,最好使用这个扩展名。默认的yii多次上传文件也使用jquery插件,但xupload似乎更有效。它对我有效我也有同样的问题,结果是只有多次上传文件表单上指定的eUpload小部件无法创建$\u POST对象?一旦我添加了第二个输入字段,它就会按预期工作。我解决了问题,我将示例代码放在下面 查看页面
控制器
$model=new Imgtable;
// Uncomment the following line if AJAX validation is needed
$this->performAjaxValidation($model);
Yii::log("actionCreate actionCreate " .isset($_POST['Imgtable']));
if(isset($_POST['Imgtable']))
{
$model->attributes=$_POST['Imgtable'];
Yii::log("actionCreate actionCreate inside if" .isset($_POST['Imgtable']));
$images = CUploadedFile::getInstancesByName('image');
Yii::log("actionCreate actionCreate inside if" .count($images));
if(isset($images) && count($images)> 0)
{
foreach ($images as $image=>$pic)
{
if ($pic->saveAs(Yii::getPathOfAlias('webroot').'/images/'.$pic->name,0777))
{
$model=new Imgtable;
//$file = CUploadedFile::getInstance($model,'binaryfile');
$model->fileName = $pic->name;
$model->fileType = $pic->type;
$url = Yii::getPathOfAlias('webroot').'/images/';
Yii::log("actionCreate actionCreate inside if if" .$pic->name);
$fp = fopen($url.$pic->name, 'r');
$content = fread($fp, filesize($url.$pic->name));
fclose($fp);
$model->binaryfile = $content;
$mode = new Productdata;
$last_invoice = Productdata::model()->find(array('order'=>'id DESC'));
$last_invoice_number = str_replace("INV:", "", $last_invoice->id);
$new_invoice_number = $last_invoice_number;
$model->product_id = $new_invoice_number;
//$model->setIsNewRecord(true);
//$model->id = null;
// $model->image = $pic->name;
$model->insert();
}
}
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
));
我想在你的控制器中,将$更改为
$images = CUploadedFile::getInstancesByName('imagepath');
它将与多重上传一起工作。
请参见我的教程
//100%工作代码
//鉴于
//内部控制器
公共函数actionMultipleupload()
{
$model=新上传的图像;
如果(isset($\u POST['Uploadimage']))
{
$model->attributes=$\u POST['Uploadimage'];
$photos=cuploatedfile::getInstanceByName('Uploadimage[imagepath]');
//如果已设置图像,则继续
如果(设置($photos)和计数($photos)>0){
//浏览每个上传的图片
foreach($image=>$pic形式的照片){
if($pic->saveAs(Yii::getPathFalias('webroot')。/path to image folder/'.$pic->name)){
//现在将其添加到主模型中
$img_add=新上传的图像;
$img\u add->filename=$pic->name;//对于您来说可能是$img\u add->name,filename正是我在模型中选择的名称
$img\u add->topic\u id=$model->id;//这将图片模型链接到主模型(如用户或配置文件模型)
$img_添加->保存();//完成
}
否则{
echo“无法上载!”
}
}
}
如果($model->save())
$this->redirect(数组('view','id'=>$model->id));
}
$this->render('multipleupload',array('model'=>$model));
}
$images = CUploadedFile::getInstancesByName('imagepath');
//100% working code
//In View
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'topic-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'), // ADD THIS
));
?>
<div class="row">
<?php
$this->widget('CMultiFileUpload', array(
'attribute' => 'imagepath',
'model'=> $model,
'id'=>'imagepath',
'accept' => 'jpeg|jpg|gif|png', // useful for verifying files
'duplicate' => 'Duplicate file!', // useful, i think
'denied' => 'Invalid file type', // useful, i think
));
?>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
</div>
<?php $this->endWidget(); ?>
//In Controller
public function actionMultipleupload()
{
$model= new Uploadimage;
if(isset($_POST['Uploadimage']))
{
$model->attributes = $_POST['Uploadimage'];
$photos = CUploadedFile::getInstancesByName('Uploadimage[imagepath]');
// proceed if the images have been set
if (isset($photos) && count($photos) > 0) {
// go through each uploaded image
foreach ($photos as $image => $pic) {
if ($pic->saveAs(Yii::getPathOfAlias('webroot').'/path-to-image-folder/'.$pic->name)) {
// add it to the main model now
$img_add = new Uploadimage;
$img_add->filename = $pic->name; //it might be $img_add->name for you, filename is just what I chose to call it in my model
$img_add->topic_id = $model->id; // this links your picture model to the main model (like your user, or profile model)
$img_add->save(); // DONE
}
else{
echo 'Cannot upload!'
}
}
}
if ($model->save())
$this->redirect(array('view', 'id' => $model->id));
}
$this->render('multipleupload',array('model'=>$model));
}