php-使用Kartik FileInput小部件保存多个图像文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-使用Kartik FileInput小部件保存多个图像文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5168字,纯文字阅读大概需要8分钟。
内容图文
![php-使用Kartik FileInput小部件保存多个图像文件](/upload/InfoBanner/zyjiaocheng/682/3987d81890934e33a216d12e506a8c86.jpg)
我目前在系统中使用Yii2 PHP框架和Kartik FileInput小部件.我已经在多个文件上使用了this guide的输入文件上传,但是在我的系统中不起作用.我目前正在使用MongoDB作为数据库.这是我到目前为止的进度(原始的,仅单次上传):
控制器,动作创建
if($model->load(Yii::$app->request->post())) {
$model->attachment = UploadedFile::getInstance($model, 'attachment');
if($model->attachment) {
$path = 'archive/contact/' . $model->attachment->baseName . '.' . $model->attachment->extension;
$count = 0;
{
while(file_exists($path)) {
$path = 'archive/contact/' . $model->attachment->baseName . '_'.$count.'.' . $model->attachment->extension;
$count++;
}
}
$model->attachment->saveAs($path);
$model->attachment = $path;
}
$model->save();
} else {
return $this->renderAjax('create', [
'model' => $model,
]);
}
视图
echo FileInput::widget([
'model' => $model,
'attribute' => 'attachment[]',
'name' => 'attachment[]',
'options' => [
'multiple' => true,
'accept' => 'image/*'
],
'pluginOptions' => [
'showCaption' => false,
'showRemove' => false,
'showUpload' => false,
'browseClass' => 'btn btn-primary btn-block',
'browseIcon' => '<i class="glyphicon glyphicon-camera"></i> ',
'browseLabel' => 'Attach Business Card',
'allowedFileExtensions' => ['jpg','gif','png'],
'overwriteInitial' => false
],
]);
我还将包括我的模特
class Contact extends ActiveRecord
{
/**
* @inheritdoc
*/
public static function collectionName()
{
return ['iaoy', 'contact'];
}
/**
* @inheritdoc
*/
public function attributes()
{
return [
'_id', 'fname','lname','email','phone','address','contact_type','business_name','notes','company_id','date_added','attachment','sort'
];
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['_id', 'fname','lname','email','phone','address','contact_type','business_name','notes','company_id','date_added','attachment','sort'], 'safe'],
[['fname','lname','contact_type','business_name'], 'required'],
[['attachment'], 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 500*500],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
//'contact_id' => 'Contact ID',
'_id' => 'Contact ID',
'contact_type' => 'Contact Type',
'business_name' => 'Business Name',
'fname' => 'First Name',
'lname' => 'Last Name',
'email' => 'Email',
'phone' => 'Phone',
'address' => 'Address',
'notes' => 'Notes',
'attachment' => 'Attachment',
'company_id' => 'Company ID',
];
}
}
如何实现已实现的多文件上传?任何想法都受到高度赞赏.
编辑:
到目前为止,这是我的多文件上传代码.我没有将其与当前代码混合(上传单个文件),而是制作了一个新的MVC.基本上,这是我在上面提到的指南中找到的内容,只做了很少的修改:
模型
<?php
namespace app\models;
use yii\base\Model;
use yii\web\UploadedFile;
class Upload extends Model
{
public $file;
public function attributes()
{
return [
'file', 'urls'
];
}
public function rules()
{
return [
[['file', 'urls'], 'safe'],
[['file'], 'file','extensions' => 'png, jpg'],
[['urls'],'string'],
];
}
}
视图
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\file\FileInput;
$form = ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data']]);
?>
<?php
echo FileInput::widget([
'model' => $model,
'attribute' => 'file[]',
'name' => 'file[]',
'options' => [
'multiple' => true,
'accept' => 'image/*'
],
'pluginOptions' => [
'showCaption' => false,
'showRemove' => false,
'showUpload' => false,
'browseClass' => 'btn btn-primary btn-block',
'browseIcon' => '<i class="glyphicon glyphicon-camera"></i> ',
'browseLabel' => 'Attach Business Card',
'allowedFileExtensions' => ['jpg','gif','png'],
'overwriteInitial' => false
],
]);
?>
<button>Submit</button>
<?php ActiveForm::end(); ?>
控制者
public function actionUpload()
{
$model = new Upload();
if ($model->load(Yii::$app->request->post())) {
$model->file = UploadedFile::getInstances($model, 'file');
foreach ($model->file as $key => $file) {
$file->saveAs('archive/reimbursement/'. $file->baseName . '.' . $file->extension);//Upload files to server
$model->urls .= 'archive/reimbursement/' . $file->baseName . '.' . $file->extension.'**';//Save file names in database- '**' is for separating images
}
$model->save();
return $this->redirect(['viewuploads', 'id' => $model->id]);
} else {
return $this->render('upload', [
'model' => $model,
]);
}
}
我还在我的Contact.php模型规则函数中添加了“ URL”
解决方法:
尝试这个:
控制器:
您应该将图像名称保存在数据库中(‘$model-> urls’)
public function actionUpload()
{
$model = new Upload();
if ($model->load(Yii::$app->request->post())) {
$model->file = UploadedFile::getInstances($model, 'file');
foreach ($model->file as $key => $file) {
$file->saveAs('/uploads/'. $file->baseName . '.' . $file->extension);//Upload files to server
$model->urls .= 'uploads/' . $file->baseName . '.' . $file->extension.'**';//Save file names in database- '**' is for separating images
}
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('upload', [
'model' => $model,
]);
}
}
视图
<?= $form->field($model, 'file[]')->widget(FileInput::classname(), [
'options' => ['multiple' => 'true'],
]) ?>
模型
class Upload extends Model
{
public $file;
public function rules()
{
return [
[['file'], 'file','maxFiles' => 6],
[['urls'],'string'],
];
}
显示图像的另一种观点
<?php
$images=explode('**',trim($model->urls));
foreach($images as $image)
{
echo Html::img(Url::to('@web/' . $image, true));
}
?>
内容总结
以上是互联网集市为您收集整理的php-使用Kartik FileInput小部件保存多个图像文件全部内容,希望文章能够帮你解决php-使用Kartik FileInput小部件保存多个图像文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。