yii框架提供了activeFileField控件來完成上傳文件(當(dāng)然也包括了上傳圖片)的操作
1,、函數(shù)原型:
public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array ());
2、調(diào)用例子:
(1)首先,設(shè)置form,,這一步一 定要做,,把form設(shè)置為’multipart/form-data’,,具體請(qǐng)看我的:
- <?php $form=$this->beginWidget('CActiveForm', array(
- 'id'=>'user-form',
- 'enableAjaxValidation'=>false,
- 'htmlOptions'=>array('enctype'=>'multipart/form-data'),
- )); ?>
注:id的作用,。
(2) 接著,,在view下的form里設(shè)置:
- <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 ? '立即創(chuàng)建' : '保存修改'); ?>
- </div>
-
- <?php $this->endWidget(); ?>
(3) 如果你想預(yù)覽圖片,,那么請(qǐng)注意了,可以加上這么一段:
- <div class="row">
- <?php echo '圖片預(yù)覽'; ?>
- <?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 = '自己設(shè)置的文件名'.'.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));
- }
注:?jiǎn)柫朔奖阄募芾?,建議這樣使用 $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)限制上傳的文件必須是圖片,,還有限制圖片大小,那么請(qǐng)到model層里的rules新增這么一句:
- array('avatar',
- 'file',
- 'allowEmpty'=>true,
- 'types'=>'jpg,gif,png',
- 'maxSize'=>1024 * 1024 * 1,
- 'tooLarge'=>'頭像最大不超過1MB,,請(qǐng)重新上傳!',
- ),
(6) 顯示圖片時(shí),,在view目錄中,使用CHtm::image()函數(shù)
CHtml::image($model->product_imgage,//保存圖片的名稱,,只要文件名正確 ,,yii默認(rèn)幫你查找圖片
‘產(chǎn)品圖片’, alt屬性,放在頁(yè)面顯示的該名稱
array(‘width’=>250,’height’=>120)); 設(shè)置圖片大小
注:參考 http://www./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./wiki/95/saving-files-to-a-blob-field-in-the-database/
yii框架提供了activeFileField控件來完成上傳文件(當(dāng)然也包括了上傳圖片)的操作
1、函數(shù)原型:
public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array ());
2,、調(diào)用例子:
(1)首先,,設(shè)置form,這一步一 定要做,,把form設(shè)置為’multipart/form-data’,,具體請(qǐng)看我的:
- <?php $form=$this->beginWidget('CActiveForm', array(
- 'id'=>'user-form',
- 'enableAjaxValidation'=>false,
- 'htmlOptions'=>array('enctype'=>'multipart/form-data'),
- )); ?>
注:id的作用。
(2) 接著,,在view下的form里設(shè)置:
- <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 ? '立即創(chuàng)建' : '保存修改'); ?>
- </div>
-
- <?php $this->endWidget(); ?>
(3) 如果你想預(yù)覽圖片,,那么請(qǐng)注意了,,可以加上這么一段:
- <div class="row">
- <?php echo '圖片預(yù)覽'; ?>
- <?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 = '自己設(shè)置的文件名'.'.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));
- }
注:?jiǎn)柫朔奖阄募芾?,建議這樣使用 $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)限制上傳的文件必須是圖片,還有限制圖片大小,,那么請(qǐng)到model層里的rules新增這么一句:
- array('avatar',
- 'file',
- 'allowEmpty'=>true,
- 'types'=>'jpg,gif,png',
- 'maxSize'=>1024 * 1024 * 1,
- 'tooLarge'=>'頭像最大不超過1MB,,請(qǐng)重新上傳!',
- ),
(6) 顯示圖片時(shí),在view目錄中,,使用CHtm::image()函數(shù)
CHtml::image($model->product_imgage,//保存圖片的名稱,,只要文件名正確 ,,yii默認(rèn)幫你查找圖片
‘產(chǎn)品圖片’, alt屬性,放在頁(yè)面顯示的該名稱
array(‘width’=>250,’height’=>120)); 設(shè)置圖片大小
注:參考 http://www./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./wiki/95/saving-files-to-a-blob-field-in-the-database/
|