当我在Yii2上传多个文件时,我收到以下错误,无法将数据插入数据库:
finfo_file(C:\ xampp \ tmp \ phpCACD.tmp):无法打开流:没有这样的 文件或目录
控制器文件:
public function actionGallery($id)
{
$model = new Gallery();
if (Yii::$app->request->post()) {
$model->imageFiles = UploadedFile::getInstances($model,'imageFiles');
foreach ($model->imageFiles as $file) {
$imageName = Yii::$app->security->generateRandomString();
$model->added_date = date('Y-m-d');
$model->emp_id = $id;
$file->saveAs('uploads/emp/' . $imageName . '.' . $file->extension);
$originalFile = EMP_PROFILE_ORIGINAL.$imageName.'.'.$file->extension;
$thumbFile = EMP_PROFILE_THUMB.$imageName.'.'.$file->extension;
Image::thumbnail($originalFile, 200, 200)->save($thumbFile, ['quality' => 80]);
$model->save();
}
}
return $this->render('gallery', [
'gal' => $model
]);
}
查看文件:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\grid\GridView;
?>
<div class="posts-form">
<div class="wrapper-md">
<div class="row">
<div class="col-sm-8">
<div class="panel panel-default">
<div class="panel-body">
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($gal, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>
<div class="form-group">
<button class="btn btn-success">Submit</button>
<a class="btn btn-default" href="<?=\Yii::$app->urlManager->createUrl('post')?>">Cancel</a>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
</div>
</div>
</div>
</div>
但我犯了错误。我无法找到解决方案。
答案 0 :(得分:2)
首先,在模型中你必须有2个变量来保存图像及其名称。
`
* @property string $image_name
*/
class Gallery extends \yii\db\ActiveRecord
{
**public $fileImage=[];**
public static function tableName(){
`
在这种情况下,我使用的$ image_name是我的模型列之一,$ fileImage,$ fileImage是一个用于上传图像的数组,
:)
然后在控制器
$model = new Gallery(); // this variable is only used to check if everything is valid
if ($model->load(Yii::$app->request->post())) {
$model->fileImage = UploadedFile::getInstances($model,'fileImage');
$a=0;
foreach ($model->fileImage as $file) {
$a++;
$model1 = new Gallery();
$file->saveAs("images/test".$a.".".$file->extension);
$model1->image_url="images/test.".$a.".".$file->extension;
$model1->image_name = "".$a;
$model1->save();
}
return $this->redirect(['index']);
} else {
return $this->render('create', [
'model' => $model,
]);
}
我认为这就是全部。 。
答案 1 :(得分:1)
您可以使用
-(void)run:(id)param {
// do thread-safe things here
@synchronized(syncObj) {
// put your critical section here
}
// do more thread-safe things here
}
而不是$ model-&gt; save();
我做了一个例子, 所以控制器中的整个代码是:
$sql = 'INSERT INTO `table`(`id`, `col1`, `col2`, `path`) VALUES (Null,"'.($model2->col1).'","'.($model2->col2).'","'.($model2->path).'")';
$command = \Yii::$app->db->createCommand($sql);
$command->execute();
它对我有用。
修改:您还可以使用$ model2-&gt; save(false);它适用于我的情况。
答案 2 :(得分:0)
致电$model->save()
前
$model->file->saveAs();
我遇到了完全相同的问题
答案 3 :(得分:-1)
*我想您忘记创建uploads和emp文件夹,或者您使用错误的文件夹名称,请检查您的文件夹名称...
*如果要保存该文件的名称,则应使用不同的变量(两个变量)来保存图像和图像的名称,