yii框架提供了activeFileField控件来完成上传文件(当然也包括了上传图片)的操作
1、函数原型:
public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array ());
2、调用例子:
(1)首先,设置form,这一步一 定要做,把form设置为’multipart/form-data’,具体请看我的:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>false,
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
)); ?>
注:id的作用。
(2) 接着,在view下的form里设置:
<div class="row">
<?php echo $form->labelEx($model,'avatar'); ?>
<?php echo CHtml::activeFileField($model,'avatar'); ?>
<?php echo $form->error($model,'avatar'); ?>
</div>
最后,加上提交按钮。
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? '立即创建' : '保存修改'); ?>
</div>
<?php $this->endWidget(); ?>
(3) 如果你想预览图片,那么请注意了,可以加上这么一段:
<div class="row">
<?php echo '图片预览'; ?>
<?php echo '<img src="http://localhost/../'.$model->avatar.'" style="width:200px; height:300px;" />'; ?>
</div>
(4)最后,需要在控制类里加上下面的:
$image = CUploadedFile::getInstance($model, 'avatar');
if( is_object($image) && get_class($image) === 'CUploadedFile' ){
$model->avatar = '自己设置的文件名'.'.jpg';
}else{
$model->avatar = 'NoPic.jpg';
}
if( $model->save() ){
if(is_object($image) && get_class($image) === 'CUploadedFile'){
$image->saveAs(Yii::app()->basePath.'/../uploads/'.$model->avatar);
}
$this->redirect(array('view','id'=>$model->userId));
}
注:问了方便文件管理,建议这样使用 $image->saveAs(‘./assets/upload/’.$imageName) ,保证assets目录下存在upload目录
版本二:
public function beforeSave()
{
if($file=CUploadedFile::getInstance($this,'uploadedFile'))
{
$this->file_name=$file->name;
$this->file_type=$file->type;
$this->file_size=$file->size;
$this->file_content=file_get_contents($file->tempName);
}
return parent::beforeSave();
}
(5)限制上传的文件必须是图片,还有限制图片大小,那么请到model层里的rules新增这么一句:
array('avatar',
'file',
'allowEmpty'=>true,
'types'=>'jpg,gif,png',
'maxSize'=>1024 * 1024 * 1,
'tooLarge'=>'头像最大不超过1MB,请重新上传!',
),
(6) 显示图片时,在view目录中,使用CHtm::image()函数
CHtml::image($model->product_imgage,//保存图片的名称,只要文件名正确 ,yii默认帮你查找图片
‘产品图片’, alt属性,放在页面显示的该名称
array(‘width’=>250,’height’=>120)); 设置图片大小
注:参考 http://www.9ihl.com/archives/312
(二)展示及下载
1,展示
<? echo CHtml::link(my_link_name,array('displaySavedImage','id'=>$model->primaryKey)); ?>
2,下载
public function actionDisplaySavedImage()
{
$model=$this->loadModel($_GET['id']);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');
header('Content-length: '.$model->file_size);
header('Content-Type: '.$model->file_type);
header('Content-Disposition: attachment; filename='.$model->file_name);
echo $model->file_content;
}
参考:http://www.yiiframework.com/wiki/95/saving-files-to-a-blob-field-in-the-database/
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
相关推荐
yii2 头像上传 完整版插件 网上收集 自行整理 需要的可以拿走
主要介绍了Yii配置文件用法,以实例形式较为详细的分析了项目开发中的控制器、项目名、pathinfo、日志等的配置技巧,非常具有实用价值,需要的朋友可以参考下
YII配置详解以及开发规范
linux安装yii2详解,centos下安装yii2
Yii框架详解
yii2 文件上传笔记
yii2-upload-behavior, ActiveRecord的Yii2文件/图像上传行为 Yii2文件/图像上传行为这个包是两种类似行为的集合。 第一个允许你将上传的文件保留为。 第二个允许你为上传的图片生成缩略图。 可以为不同的属性多次...
yii导出html文件,或者导出text文件,超简洁。纯手打请高评谢谢
找了好久才找到的Yii2.0 找不到的朋友的福利,快快下载吧,需要怎么这么长我了个去
YII 多种缓存机制的运用 如文件缓存内存缓存 动态缓存等
头像生成器通过用户的名字,文件或url为Yii2生成头像。特征通过用户名生成头像从文件或网址生成头像(仅适用于http) 通过用户名自动选择背景颜色文字的对比色字体和大小自定义背景纹理(2现在可用)依存关系...
yii2 basic 文件
很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架
学习yii Rbac自己总结的经验!因为找过相关资料,很头疼,所以自己总结出来,共大家分享!!
yii2 图片上传扩展插件
Yii是一个基于组件的高性能PHP框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,...
《深入理解Yii2.0》是一本干货。主要讲解Yii2.0及所代表的最新一代Web开发框架的新特性、新技术、新理念、新模式。 采用的方式是分析框架的源代码,尝试从根上进行理解和阐述,并融入个人使用Yii开发的一些经验和...
NULL 博文链接:https://hudeyong926.iteye.com/blog/1484367
对于想使用 Yii 的开发者而言,熟悉面向对象编程(OOP)会使开发更加轻松,因为 Yii 就是一个纯 OOP 框架。 Yii 适合做什么? Yii 是一个通用 Web 编程框架,能够开发任何类型的 Web 应用。它是轻量级的,又装配了很...