`
shoukii0721
  • 浏览: 77617 次
社区版块
存档分类
最新评论

Yii中文件上传下载 (CHtml::activeFileField)

 
阅读更多

页面
-------------------------------------------------

<?php $form=$this->beginWidget('CActiveForm', array(
		'id'=>'add-form',
		'enableClientValidation'=>true,
	    'clientOptions'=>array( 'validateOnSubmit'=>true,),
	    'htmlOptions'=>array('enctype'=>'multipart/form-data'),  
    )); 
?>
    <table>
        <tr>
            <td width="20%">
                <b>ファイルパス:</b>&nbsp;&nbsp;<font color="red">*</font>
            </td>
            <td width="80%">
                <?php echo CHtml::activeFileField($model, 'file'); ?>
                <?php echo $form->error($model,'file');?>
            </td>
        </tr>
    </table>

    <table>
        <tr>
            <td>
                <?php echo CHtml::button('上传', array('submit' => array('downfiles/upload'))); ?>
            </td>
        </tr>
    </table>



Model
-------------------------------------------------
public function rules()
{
	return array(
                
        array('file', 'file','allowEmpty'=>true ,
                'types'=>'jpg, gif, png, doc, txt',
                'maxSize'=>1024 * 1024 * 10, // 10MB
                'tooLarge'=>'The file was larger than 10MB. Please upload a smaller file.',
            ),
	);
}


上传
-------------------------------------------------
public function actionUpload(){
    
    $model = new DownFiles();
    
    if(isset($_POST["DownFiles"])){
        
        $model->attributes=$_POST['DownFiles'];

        $file = CUploadedFile :: getInstance($model, 'file');
        
        if(is_null($file)){
            yii::app ()->user->setFlash('failed', '请选择上传文件');
            $this->render('upload', array('model' => $model));
            return ;
        }
        
        if (is_object($file) && get_class($file) == 'CUploadedFile') {
            
            Yii::log("File Name : "  . $file->getName() );
            
            // 文件类型
            $model->fileType = strtolower($file->getExtensionName());

            // 存储文件名
            $newFileName = date('YmdHis') . '_' . rand(1000, 9999) . '.' . $model->fileType; 
            // 服务器端存储路径
            $newFilepath = Yii::app()->params['upload_folder'] . $newFileName;

            // 上传文件名
            $model->fileName = $file->getName();
            // 文件类型 (application/x-msdownload、application/pdf、application/octet-stream)
            $model->fileType = $file->getType();
            // 文件大小
            $model->fileSize = $file->getSize();
            
            if ($model->validate()  && $model->save()){
                // 将文件存在在服务器端
                $file->saveAs($newFilepath);

                yii::app ()->user->setFlash('successed', '上传成功');
            } else {
                yii::app ()->user->setFlash('failed', '上传失败');
            }
            
        } else {
            yii::app ()->user->setFlash('failed', '上传失败');
        }
        
        $this->render('upload', array('model' => $model));
        
    }else{
        $this->render('upload', array(
            'model' => $model,
        ));
    }
    
}






文件
-------------------------------------------------

public function actionDownload(){
    
    if (isset($_GET["id"])) {
        $id = $_GET["id"];

        $model = DownFiles::model()->find('id =:id', array('id' => $id));
        
        if ($model == null) {
            throw new CHttpException ('500', '文件不存在');
        } else {
            // 服务器端文件的路径
            $fileName = $model->saveFilePath ;
            
            if (file_exists($fileName)){
                yii::app ()->request->sendFile ($model->fileName,  file_get_contents ($fileName));
            }
        }
    }
}
分享到:
评论

相关推荐

    Yii2扩展开发与代码复用:以资源包为例

    学习如何编写Yii2扩展,以扩展形式编写资源包,实现在不同应用和项目之间重用资源包,且降低维护成本。

    Yii 2文件下载

    找了好久才找到的Yii2.0 找不到的朋友的福利,快快下载吧,需要怎么这么长我了个去

    yii使用activeFileField控件实现上传文件与图片的方法

    本文实例讲述了yii使用activeFileField控件实现上传文件与图片的方法。分享给大家供大家参考,具体如下: yii框架提供了activeFileField控件来完成上传文件(当然也包括了上传图片)的操作,下面介绍yii的...

    yii导出html文件

    yii导出html文件,或者导出text文件,超简洁。纯手打请高评谢谢

    yii2-resque-module::construction:正在施工:construction:

    Yii 2.0 Framework的Resque Job Manager模块 具有后端UI的Resque作业管理器模块 安装 安装此扩展的首选方法是通过 。 无论运行 php composer.phar require --prefer-dist hrzg/yii2-resque-module "*" 或添加 ...

    yii2-adminlte3-asset:Yii2框架的AdminLte3资产

    Yii2框架的AdminLTE 3资产该软件包为主题提供了必要的资产。 有关主题信息,请参阅。安装安装此扩展的首选方法是通过 。 无论运行php composer.phar require --prefer-dist bobonov/yii2-adminlte-assets "~1.0.0"或...

    yii2 文件上传笔记

    yii2 文件上传笔记

    Yii 2.0.13.1.zip

    数据库数据库支持有关使用表达式的一些增强功能,现在,您可以在\yii\db\QueryTrait::limit(),\yii\db\QueryTrait::offset()和\yii\data\Sort中使用它们。MSSQLMSSQL支持得到增强。首先,模式阅读性能显着提高...

    yii2-schemadump:从现有数据库生成模式

    演示版要求PHP 7.3或更高版本Yii 2.x安装composer require --dev jamband/yii2-schemadump用法在config / console.php中添加以下内容: return [ . . . 'components' =&gt; [ . . . ], 'controllerMap' =&gt; [ 'migrate' ...

    实例讲解yii2.0在php命令行中运行的步骤

    Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等,资源放在Web可访问的目录下,直接被Web服务器调用。 有时候有些功能需要做到计划任务中去,因此就需要yii能用php命令去执行。yii2.0...

    yii2-exportable-widget:允许将GridView小部件导出为不同的格式

    Yii2的可导出小部件 一个库不仅仅是一个简单的小部件。 借助此库,无论您使用我们的(强烈建议使用)还是您自己的库,您都可以向Yii2应用程序提供导出功能。 如果您使用的是,则将利用预定义的导出格式集,该格式...

    yii2-upload-behavior, ActiveRecord的Yii2文件/图像上传行为.zip

    yii2-upload-behavior, ActiveRecord的Yii2文件/图像上传行为 Yii2文件/图像上传行为这个包是两种类似行为的集合。 第一个允许你将上传的文件保留为。 第二个允许你为上传的图片生成缩略图。 可以为不同的属性多次...

    Yii2.0打造京东商城平台PHP电商实战Yii2.0视频教程

    教程名称:Yii2.0 打造京东商城平台 PHP电商实战 Yii2.0视频教程 教程内容: 包含了电商的所有...不错的学习YII框架的基础课程,电商系统的结构完整、框架资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    yii2-chartjs-widget:针对Yii2的ChartJs小部件

    无论运行composer require 2amigos/yii2-chartjs-widget:~2.0或添加" 2amigos/yii2-chartjs-widget " : " ~2.0 " 到应用程序的composer.json文件的require部分。用法支持以下类型: 线酒吧雷达极性馅饼油炸圈饼气泡...

    yii2-pace-widget:用于自动网页进度条的 Yii2 小部件

    Yii2 配速小部件一个基于 javascript 库的用于自动网页进度条的 Yii2 小部件。佩斯做什么? Pace 将自动监控您的 ajax 请求、事件循环延迟、文档就绪状态和页面上的元素以决定进度。 在 ajax 导航上,它将重新开始!...

    yii2-js-log:将 javascript 错误记录到 Yii 日志中

    这是早期的原型。 当然,您可以使用它,但是......到composer.json文件的 require 部分。 用法 安装扩展后,只需通过以下方式在代码中使用它: &lt;?= \trntv\yii\jslog\ AutoloadExample :: widget (); ?&gt; ```

    yii-yii2-bridge:在 Yii 1 应用程序中使用 Yii 2 小部件

    在遗留的 Yii 1 应用程序中使用 Yii 2 小部件。 要求 Yii 1.1.15 应用 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require --prefer-dist "neam/yii-yii2-bridge" "*" 或添加 " neam/yii-yii2...

    yii2-queue-mailer:Yii2框架的队列邮件装饰器

    Yii2框架的队列邮件装饰器使用Yii2队列在后台发送您的电子邮件。安装安装此扩展的首选方法是通过 。 无论运行php composer.phar require --prefer-dist yarcode/yii2-queue-mailer 或添加" yarcode/yii2-queue-...

    yii2-stubs-generator:PhpStorm中的自动完成功能不再让您感到痛苦

    Yii :: $ app的Yii :: app存根生成器2 此扩展为Yii 2提供了不再需要的组件和用户身份自动完成生成器命令。 安装 安装此扩展的首选方法是通过 。 无论运行 ...

    yii2-semantic-ui:Yii2 语义 UI 扩展

    它在 Yii 小部件和帮助器类方面封装了语义 UI 组件和插件,简化了语义 UI 组件/插件在 Yii 应用程序中的使用。安装安装此扩展的首选方法是通过 。 要么跑...

Global site tag (gtag.js) - Google Analytics