Yii文件上传问题

时间:2012-03-24 11:07:59

标签: php file yii

几个月前,我开发了一个使用YII的简单应用程序,其中一项功能是上传文件。 该功能在我的开发机器上运行良好,几天前客户端发现自部署以来,文件上传功能在他的服务器中无效。

之后我测试了我的开机也无法正常工作。

我的控制器看起来:

public function actionEntry() {
        if (!Yii::app()->user->isGuest) {
            $model = new TrackForm;

            if (isset($_POST['TrackForm'])) {
                $entry = new Track;
                try {
                  $entry->product_image = $_POST['TrackForm']['product_image'];
                    $entry->product_image = CUploadedFile::getInstance($model, 'product_image');

                    if ($entry->save()) {
                        if ($entry->product_image) {
                            $entry->product_image->saveAs($entry->product_image->name, '/trackshirt/uploads');
                        }
                        }

                        $this->render('success', array('model' => $model));

                        // redirect to success page
                    }
                } catch (Exception $e) {
                    echo 'Caught exception: ', $e->getMessage(), "\n";
                }
            } else {
                $this->render('entry', array('model' => $model));
            }
        }
    }

模型如下:

<?php
class Track extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'product_details';
    }
}

我的观点看起来:

 <?php
            $form = $this->beginWidget('CActiveForm', array(
                        'id' => 'hide-form',
                        'enableClientValidation' => true,
                        'clientOptions' => array(
                            'validateOnSubmit' => true,
                        ),
                        'htmlOptions' => array('enctype' => 'multipart/form-data'),
                    ));
            ?>

    <p class="auto-style2"><strong>Administration - Add New Product</strong></p>
    <table align="center" style="width: 650px"><td class="auto-style3" style="width: 250px">Product Image</td>
            <td>

                <?php echo $form->fileField($model, 'product_image'); ?>
            </td>
        </tr>

    </table>

    <p class="auto-style1">

                <div style="margin-leftL:-100px;">
                <?php echo CHtml::submitButton('Submit New Product Form'); ?>
            </div>

     <?php $this->endWidget(); ?>

知道问题在哪里?我试图调试它,但每次返回Null。

感谢。

3 个答案:

答案 0 :(得分:1)

我很惊讶你没有看到这样的错误信息:

<?php echo $form->activeFileField($model, 'product_image'); ?>

因为CActiveForm没有属于CHtml的方法activeFileField()

我认为你需要

<?php echo $form->fileField($model, 'product_image'); ?>

进行此更改后,我可以使用您的代码在我的服务器上上传文件,并在此处删除另一个右大括号:

                         // redirect to success page
                 /*}*/
                 } catch (Exception $e) {

(可能是您上传代码时剪切的产物)

答案 1 :(得分:1)

这个link可以帮助你。也可以转储CUploadedFile实例来检查发生了什么。

答案 2 :(得分:0)

请记住,CUploadedFile :: getInstance($ model,$ attribute)返回类型为CUploadedFile的对象。如果您只想将$ entry-&gt; product_image设为图像文件的名称,您可以执行以下操作:

$image = CUploadedFile::getInstance($model, 'product_image');
$entry->product_image = $image->name;