UPLOAD MULTIPLE FILES AND SAVE CATEGORY, PATH AND FILE NAMES IN YII 2

 


Create Uploads table.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE `uploads` (
`id` int(11) NOT NULL,
`category` varchar(45) DEFAULT NULL,
`excelFile` varchar(255) DEFAULT NULL,
`path` varchar(45) DEFAULT NULL,
`dateUploaded` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
ALTER TABLE `uploads`
ADD PRIMARY KEY (`id`);
 
ALTER TABLE `uploads`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
COMMIT;
 
<span style="background-color:#f3f6f8;font-family:Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', 'Courier 10 Pitch', Courier, monospace;">


 

Create Models, Views and Controllers for Uploads table.

Create a form with these input.

1
2
3
4
5
</pre>
<div class="uploads-form">['enctype' =&gt;'multipart/form-data']]); ?&gt; field($model, 'category')-&gt;widget(Select2::classname(), [ 'data' =&gt; ArrayHelper::map(Category::find()-&gt;all(),'name','name'), 'language' =&gt; 'en', 'options' =&gt; ['placeholder' =&gt; 'Select Semester'], 'pluginOptions' =&gt; [ 'allowClear' =&gt; true ], ]);?&gt; field($model, 'excelFile[]')-&gt;fileInput(['multiple'=&gt;true]) ?&gt;
<div class="form-group">'btn btn-success']) ?&gt;</div>
</div>
<pre>

Modify your Uploads model. Change type of excelFile, add extensions and skipOnError.

1
2
3
[['excelFile'], 'file', 'extensions'=>'xls, xlsx', 'maxFiles' => 5, 'skipOnEmpty'=>false,
'wrongExtension'=>'{extensions} files only', 'on'=>'update'
],

Modify your controller create function

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public function actionCreate()
{
$model = new Uploads();
 
if ($model->load(Yii::$app->request->post())) {
$model->excelFile = UploadedFile::getInstances($model, 'excelFile');
if ($model->excelFile && $model->validate()){
if(!file_exists((Url::to('uploads/')))){
mkdir(Url::to('uploads/'), 0777, true);
}
$path =Url::to('uploads/');
foreach ($model->excelFile as $excelFile){
$excel = new Uploads();
$excel->category = $model->category;
 
$count= Uploads::find()->where(['category'=>$model->category])->count();
$fileNo = $count +1;
$excel->excelFile = $model->category.'_'.$fileNo.'.'.$excelFile->extension;
$excel->path = 'uploads/'.$excel->excelFile;
if ($excel->save()){
$excelFile->saveAs($excel->path, $excel->excelFile);
}
 
}
return $this->redirect(['index']);
}
 
}
 
return $this->render('create', [
'model' => $model,
]);

upload_multiple_files

Post a Comment

0 Comments