Yii使用CForm类(Form builder)上传文件

模型(model)

首先需要一个文件上传的模型:FileUpload.php

<?php

class FileUpload extends CFormModel {

    public $image;

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        return array(
            //note you wont need a safe rule here
            array(‘image‘, ‘file‘, ‘allowEmpty‘ => true, ‘types‘ => ‘jpg, jpeg, gif, png‘),
        );
    }

}

注意:> 关于更多验证规则的说明请查看 Reference: Model rules validation

用于 CForm 的数组

下面来创建用于 CForm 的数组: uploadForm.php

<?php

return array(
    ‘title‘ => ‘Upload your image‘,

    ‘attributes‘ => array(
        ‘enctype‘ => ‘multipart/form-data‘,
    ),

    ‘elements‘ => array(
        ‘image‘ => array(
            ‘type‘ => ‘file‘,
        ),
    ),

    ‘buttons‘ => array(
        ‘reset‘ => array(
            ‘type‘ => ‘reset‘,
            ‘label‘ => ‘Reset‘,
        ),
        ‘submit‘ => array(
            ‘type‘ => ‘submit‘,
            ‘label‘ => ‘Upload‘,
        ),
    ),
);

视图文件(view)

创建视图文件: upload.php

<?php if (Yii::app()->user->hasFlash(‘success‘)): ?>
    <div class="info">
        <?php echo Yii::app()->user->getFlash(‘success‘); ?>
    </div>
<?php endif; ?>

<h1>Image Upload</h1>

<div class="form">
<?php echo $form; ?>
</div>

控制器(Controller)

添加控制器(controller)和动作(action):

<?php

class FileUploadController extends CController {

    public function actionUpload() {
        $model = new FileUpload();
    $form = new CForm(‘application.views.fileUpload.uploadForm‘, $model);
        if ($form->submitted(‘submit‘) && $form->validate()) {
            $form->model->image = CUploadedFile::getInstance($form->model, ‘image‘);
            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            //do something with your image here
            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            Yii::app()->user->setFlash(‘success‘, ‘File Uploaded‘);
            $this->redirect(array(‘upload‘));
        }
        $this->render(‘upload‘, array(‘form‘ => $form));
    }
}

在这里最好的方式是在你的 FileUpload 模型中执行对图片的一些操作。注意:你不需要向 FileUpload::image 赋值,但是可以提供访问它的方法从而达到强壮模型(model)简化控制器(controller).

转载自 HDR

时间: 2024-11-02 13:42:43

Yii使用CForm类(Form builder)上传文件的相关文章

asp无惧上传类2.2上传文件的同时,通过 Request.QueryString将参数传递到保存页面中

先转一段文字,对不对再评论 在后台asp程序中,以前获取表单提交的ASCII 数据,非常的容易.但是如果 需要获取上传的文件,就必须使用Request对象的BinaryRead方法来读取.BinaryRead方法是对当前输入流进行指定字节数的二进制读取,有点需要注意的 是,一旦使用BinaryRead 方法后,再也不能使用Request.Form 或  Request.QueryString 集合了.结合Request对象的TotalBytes属性,可以将 所有表单提交的数据全部变成二进制,不过

django Form组件 上传文件

上传文件 注意:FORM表单提交文件要有一个参数enctype="multipart/form-data" 普通上传: urls: url(r'^f1/',views.f1), url(r'^f2/',views.f2), views: def f1(request): if request.method == "GET": return render(request,'f1.html') else: import os #导入os模块 #request.get /

文件上传工具类——傻瓜式上传文件

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6128382.html 在前面  (http://www.cnblogs.com/ygj0930/p/6073505.html)  我们提到过Javaweb开发的文件上传功能的实现,需要借助第三方jar包,并且要创建factory呀.设置临时文件区路径呀等等,十分繁琐.而作为一个开发人员,不可能每次实现文件上传时都从头到尾做那么多工序.这时候,我们可以把这些繁琐的工作封装起来,把一个个功能做成以供调用的方法.

java http工具类和HttpUrlConnection上传文件分析

利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java中上传文件. Java使用HttpURLConnection上传文件 使用HttpUrlConnection进行post请求上传文件 封装HttpClient4.3.x包括文件上传 使用 HttpClient 4 进行文件上传 httpclient4教程 下面分享一个自己封装的http工具类(暂不直

C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用

工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的dll就是ICSharpCode.SharpZipLib.dll,废话不多了,网上也有很多的资料,我将其最常用的两个函数整理了一下,提供了一个通用的类,这样在工作中可以快速的完成压缩和解压缩的动作哦 官网下载地址:  http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx 1. 在项目中添加对ICSharpCode.SharpZipLib.dll的引用: 2. 在需要

Jquery.form异步上传文件常见问题解决

Jquery.form常用方法我就不多说,主要说一下在使用过程中碰到的问题 1.提示 “xxxx” is not define 或者"xxx" is not a function 这种就检查下自己的代码,哪里粗心写错了单词,路径写的不正确,引用错了文件等等 2.使用ajaxForm函数写好方法后,点击按钮无反应 这种问题需要把按钮type="button"设置成 type="submit" 并且需要将按钮放置到<form></f

jquery.form.js上传文件ie弹出下载文件解决办法

在ie下如果返回类型为jsonresult,ie老版本无法识别json类型,默认将会采用下载或者打开文件! 如果使用mvc的话.直接修改action返回类型为string即可,例如:return JsonConvert.SerializeObject(new { url = "", error = "请选择文件" });

form、iframe实现异步上传文件

转载自:http://blog.csdn.net/sunjing21/article/details/4779321 实现主要功能: 页面提供一个上传图片的input file选择框,用于上传某一类型的数张图片 每次选择完本地图片后,图片便异步存储到后台的文件夹中: 并将路径信息存储到数据库中: 页面上显示此图的缩略图,并在旁边显示一个删除标记,当点击时,将此图片从页面.数据库.后台的文件夹中删除 input file选择框清空,再点击用于上传下一张图片: JSP页面编写如下: <div> &

ajax上传文件 基于jquery form表单上传文件

<script src="/static/js/jquery.js"></script><script> $("#reg-btn").click(function () { // 1. 取到用户填写的数据 var form_data_obj = new FormData(); form_data_obj.append('username',$('#id_username').val()); form_data_obj.append